[英]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.