选择分类C

时间:2013-03-25 17:45:23

标签: c arrays sorting

我正在进行选择排序。

我的问题是,如果从“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;
}

1 个答案:

答案 0 :(得分:2)

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

while (x < (size - 1));

不正确。它什么都不做,所以会无限循环。取出分号以获得预期效果。同样,

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

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