1

我正在研究选择排序。

我的问题是,如果你从“void sort”中删除我的所有代码,程序就会运行。一旦你把所有的代码放回去,“void sort”甚至不会进入“void sort”中的第一个“printf”函数。我不知道是什么把一切都挂了。

这里的第二个问题是这个函数应该这样做:

使用 vars 遍历数组 []:x(起点,) temp(临时最低数字)和 k(当前数字)。它应该——对于每次迭代——从 x 开始,设置 temp = x,设置 k = ( x+1) 然后 k++ 直到它到达数组的末尾。如果 array[k] 小于 array[temp] 它应该设置 temp 等于 k。然后在最后:交换 array[x] 和 array[temp] 并从 (x+1) 重新开始

当它之前工作时,我得到的唯一结果是 x = 7 (列表的末尾),它只会打印最后一个数字。:/ 做什么

此外,不需要但次要的问题,我到底如何从 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;
}
4

1 回答 1

2

我不知道这是否是编写问题或代码中的错误,但是

while (x < (size - 1));

是不正确的。它什么也不做,所以会无限循环。取出分号以获得预期的效果。相似地,

for (int i = 0; i < SIZE; i++);

不应该有那个分号。此外,您不能i在适当的 C 中声明,并且i已经声明,因此最好将其保留在for (i = 0; ....

于 2013-03-25T18:01:30.453 回答