选择排序不按预期输出

时间:2018-03-21 15:23:04

标签: c

我为我的C类做了这个作业。她给了我们选择排序的伪代码。还有一些其他必需品,但那些我不需要帮助的人。我按照她的代码,甚至在线查看示例代码。我的遵循相同的概念,但它永远不会奏效。当我打印"排序"数组,它打印未分类的数字和一堆其他数字。如果我输入' 8 7 6 5 4 3 2 1'我的阵列打印' 8765432146142368001234567846142368'。

#define MAXSIZE 10

void print_array(const int a[], int size);

int main()
{
   int get_numbers(int n[]); //Function to retrieve a list of numbers and 
   returns an array of the numbers

   int numbers[MAXSIZE]; //Array to store unsorted list of numbers

   void selection_sort(int a[], int size);

   puts("Enter each number then press enter. (Ctrl + Z) to end.");
   get_numbers(numbers);
   selection_sort(numbers, MAXSIZE);  
   print_array(numbers, MAXSIZE);
}

void get_numbers(int n[])
{
   int s; //Stores return value of scanf
   int i; //Stores amount of values entered

   for(i = 0; (s = scanf("%i", &n[i])) != EOF; i++);

   if(i == 0)
   {
      puts("Error: No numbers entered.");
   }else if(i > MAXSIZE)
   {
      puts("Error: Too many values entered.");
      print_array(n, MAXSIZE);
   }else
   {
      print_array(n, MAXSIZE);
   }
}

void print_array(const int a[], int size)
{
    for(int i = 0; i < size; i++)
    {
        printf("%i", a[i]);
    }
}

void selection_sort(int a[], int size)
{
   void swap(int n[], int i, int min_index);
   for(int i = 0; i < (size - 1); i++)
   {
      int min = a[i];
      int min_index = i;
      for(int j = (i + 1); j < size; j++)
      {
         if(a[j] < min)
         {
            min = a[j];
            min_index = j;
         }
      }
      swap(a, i, min_index);
   }
}

void swap(int n[], int i, int min_index)
{
    int temp = n[i];
    n[i] = n[min_index];
    n[min_index] = temp;
}

2 个答案:

答案 0 :(得分:1)

您的计划存在很多问题。

需要在任何其他函数之前声明函数原型。

如果他们提前/延迟纾困,你需要将i的值传递给print_array。如果您通过MAXSIZE,您将读取/写入不属于您的内存。这就是为什么你会得到奇怪的价值。

答案 1 :(得分:0)

感谢大家和他们的提示!我接受了鲍勃贾维斯提到的内容(根据确切的数值排序,间隔我的输出)。我的主要问题是它似乎打印了一堆随机数,我不确定它来自哪里。间隔后我意识到它会对它们进行排序但是有一个随机数字ex。 8 7 6 5 4 3 2 1 44176288 0 1 2 3 4 5 6 7 8 44176288 0.经过一些调试后,我意识到我的打印尺寸并不准确。固定完所有不同尺寸后,它就被固定了。