【问题标题】:Broken selection sort C破碎选择排序 C
【发布时间】:2013-03-15 07:40:57
【问题描述】:

我正在研究选择排序。

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

【问题讨论】:

  • 尝试将\n 放在所有打印语句之后,您的输出可能会被缓冲
  • 你完全正确。我这样做了,现在它在“void sort”中的“while (x

标签: c arrays sorting


【解决方案1】:

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

while (x < (size - 1));

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

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

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

【讨论】:

  • 我想就是这样。 xsize 在循环中永远不会改变,所以它只会永远迭代。
  • 嗨!如果您发现此答案最有帮助,您可以单击左侧上下箭头下方的复选标记以“接受”该答案。这让以后的访问者可以看到哪个答案最有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 2016-02-21
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
相关资源
最近更新 更多