我正在进行选择排序。
我的问题是,如果从“void sort”中删除我的所有代码,程序就会运行。一旦你将所有代码放回去,“void sort”甚至不会进入“void sort”中的第一个“printf”函数。我不知道是什么让一切都挂了。
这里的第二个问题是这个函数应该这样做:
使用vars运行数组[]:x(起始点),temp(临时最小数字)和k(当前数字。)它应该 - 对于每次迭代 - 从x开始,设置temp = x,设置k =(x + 1)然后k ++直到它到达数组的末尾。如果array [k]小于array [temp],则应将temp设置为等于k。然后在结束时:交换数组[x]和数组[temp]并从(x + 1)重新开始
当它以前工作时,我得到的唯一结果是x = 7(列表的结尾),它只打印最后一个数字。 :/ wat do
另外,不需要但是第二个问题我该如何从void函数返回排序数组?全球变量?其他什么?
#include <stdio.h>
#define SIZE 8
void sort(int array[], int size)
{
printf("starting sort, declaring vars...");
int temp, placeholder, x, k;
printf("setting x...");
x = 0;
printf("size(%d), i(%d)", size, x);
printf("starting sort loop...");
while (x < (size - 1));
{
k = (x + 1);
temp = x;
while(k < size)
{
if(array[k] < array[temp])
temp = k;
k++;
}
printf("array[%d] is %d from array[%d]\n", x, array[temp], temp);
placeholder = array[temp];
array[temp]= array[x];
array[x] = placeholder;
printf("%d ", array[x]);
x++;
}
printf("\n");
}
int main(void)
{
int numbers[SIZE] = {4, 15, 16, 50, 8, 23, 42, 108 };
int i;
for (i = 0; i < SIZE; i++)
printf("%d ", numbers[i]);
printf("\ncounted and sorting...\n");
sort(numbers, SIZE);
for (int i = 0; i < SIZE; i++);
printf("%d", numbers[i]);
printf("\n");
return 0;
}
答案 0 :(得分:2)
我不知道在编写问题或代码中是否存在错误,但
while (x < (size - 1));
不正确。它什么都不做,所以会无限循环。取出分号以获得预期效果。同样,
for (int i = 0; i < SIZE; i++);
不应该有分号。另外,您无法在适当的C中声明i
,并且已经声明了i
,因此最好将其保留在for (i = 0; ...
。