繁体   English   中英

选择排序未按预期输出

[英]Selection Sort doesn't output as expected

我的C类有这个作业。 她为选择排序提供了伪代码。 还有其他一些条件,但是我不需要这些条件。 我遵循了她的代码,甚至在网上寻找示例代码。 我的遵循相同的概念,但从未奏效。 当我打印“ sorted”数组时,它会打印未排序的数字和一堆其他数字。 如果输入“ 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;
}

您的程序有很多问题。

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

如果他们提早/后期纾困,则需要将i的值传递给print_array。 如果通过MAXSIZE,您将正在读取/写入非您自己的内存。 这就是为什么您得到奇怪的值的原因。

谢谢大家和他们的提示! 我接受了鲍勃·贾维斯(Bob Jarvis)所说的(根据确切的值数进行排序,将输出间隔开)。 我的主要问题是,它似乎正在打印一堆随机数,我不确定它是从哪里来的。 间隔后,我意识到它确实对它们进行了排序,但是有一个随机数ex。 8 7 6 5 4 3 2 1 44176288 0 1 2 3 4 5 6 7 8 441762880。经过更多调试后,我意识到我也没有以精确的数组大小进行打印。 固定所有不同的尺寸后,将其固定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM