【问题标题】:Sorting array of integers C [closed]排序整数数组C [关闭]
【发布时间】:2015-03-16 01:30:57
【问题描述】:

我是一名学习计算机科学的初学者 c 程序员,我正在尝试创建一个排序程序来对整数数组进行排序,尽管我一直得到错误的结果,这就是我目前得到的结果:

#include <stdio.h>
#include <string.h>    
#define TAM 9

int sort_array(int num1[],int num2[]);    
int main(){
    int i=0;   
    int num1[TAM] = {5,6,2,4,7,1,3,0};
    int num2[TAM] = {0};
    int * ptr_num2 = num2;

    sort_array(num1,num2);

    while(*ptr_num2 != '\0'){
        printf("%c",*ptr_num2+48);
        ptr_num2++;
    }
    putchar('\n');

    return 0;
}

int sort_array(int num1[],int num2[]){
    int min=256,max=0,i,j;
    int * ptr_num1 = num1;
    int * ptr_max = num1;
    int * ptr_num2 = num2;

    /* check for max */
    while(*ptr_max != '\0'){
        if(*ptr_max > max) max = *ptr_max;
        ptr_max++;
    }

    for(i=0;i<TAM-1;i++){
        /* check for min */
        for(j=0;j<TAM-1;j++){
            if(*ptr_num1 < min) min = *ptr_num1;
            ptr_num1++;
            num1[i] = max;
        }
        *ptr_num2 = min;
        ptr_num2++;
    }
    return 0;
}

我已经为此绞尽脑汁好几个小时了。

编辑:忘了提到其中一些可能没有意义,因为我只是在尝试一些东西。

【问题讨论】:

  • 对于某些特定输入,您的实际输出和预期输出是多少?
  • 你的程序中也可能有undefined behavior,因为数组num1被声明包含九个元素,但你只初始化,这意味着最后一个元素是不确定的。
  • 您为什么会选择如此复杂的排序程序?有什么奇怪的要求吗?
  • 另外,为什么要使用 null-at-the-end 技巧?不能用实际长度吗?
  • 与论坛网站不同,我们不使用“谢谢”、“感谢任何帮助”或Stack Overflow 上的签名。请参阅“Should 'Hi', 'thanks,' taglines, and salutations be removed from posts?.

标签: c arrays sorting pointers


【解决方案1】:

我知道您不了解典型的数组排序...好吧,让我向您介绍一种更简单的排序。尽管它通常不是最有效的,但它是最容易理解的,并且考虑到您正在处理小数组而不是数据库这一事实,它会很好。

我说的是老朋友,我们的冒泡排序

冒泡排序是一种众所周知的简单数组排序算法—— 逻辑很简单。你在两个对上遍历整个数组 - 即 Array[0] 和 Array[1],Array[1] 和 Array[2],等等......

当你发现事情不是他们应该的样子时——在你的情况下,更大的索引号大于更低的索引号——你在它们之间交换,直到你到达一个迭代,你通过整个数组并且根本没有交换。

如果你不太理解,这里是来自维基百科的伪代码(天哪,我真是个 n00b):

procedure bubbleSort( A : list of sortable items )
n = length(A)
repeat 
 swapped = false
 for i = 1 to n-1 inclusive do
   /* if this pair is out of order */
   if A[i-1] > A[i] then
     /* swap them and remember something changed */
     swap( A[i-1], A[i] )
     swapped = true
   end if
  end for
 until not swapped
end procedure

这里有一些 C 代码:

#include <stdio.h>

int main()
{
int array[100], n, c, d, swap; 
printf("Enter number of elements\n");
scanf("%d", &n);
printf("Enter %d integers\n", n);
for (c = 0; c < n; c++)
scanf("%d", &array[c]);
for (c = 0 ; c < ( n - 1 ); c++)
{
for (d = 0 ; d < n - c - 1; d++)
{
  if (array[d] > array[d+1]) /* For decreasing order use < */
  {
    swap       = array[d];
    array[d]   = array[d+1];
    array[d+1] = swap;
    }
  }
}

printf("Sorted list in ascending order:\n");

for ( c = 0 ; c < n ; c++ )
 printf("%d\n", array[c]);

return 0;
}

在这里,顺便说一句,功劳不属于我: http://www.programmingsimplified.com/c/source-code/c-program-bubble-sort

希望这对你有所帮助,祝你好运:)

【讨论】:

  • @AAbranov,我已经进行了将近 40 年的编程,我认为 wiki 和其他在线资源可以节省大量时间。而且我不需要在办公桌上放一堆参考手册。
猜你喜欢
  • 1970-01-01
  • 2014-08-16
  • 2021-09-27
  • 2021-01-08
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多