我为我的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;
}
答案 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.经过一些调试后,我意识到我的打印尺寸并不准确。固定完所有不同尺寸后,它就被固定了。