谁能告诉我为什么我的排序不起作用? (c代码)

时间:2016-08-19 07:08:28

标签: c sorting

我刚刚开始编程。 我刚刚编写了这段代码,但它不起作用。 你能告诉我为什么吗?

code =

int main(int argc, const char *argv[])
{
    int a, b, c, d, e, f, g, h, i, j;
    int s;

    printf("enter 10 numbers: ");
    scanf("%d%d%d%d%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f, &g, &h, &i, &j);

    int numbers[10] = {a, b, c, d, e, f, g, h, i, j};

    //%d %d %d %d %d %d %d %d %d %d        a, b, c, d, e, f, g, h, i, j
    printf("before \n %d %d %d %d %d %d %d %d %d %d\n", a, b, c, d, e, f, g, h, i, j);

    for (int k = 0; k == 10; k++) {
        if (numbers[k] <= numbers[k + 1]) {
            numbers[k] = s;
            numbers[k] = numbers[k + 1];
            numbers[k + 1] = s;

        }
    }

    printf("after \n %d %d %d %d %d %d %d %d %d %d\n", numbers[0], numbers[1], numbers[2], numbers[3], numbers[4], numbers[5], numbers[6], numbers[7], numbers[8], numbers[9]);

    return 0;
}

4 个答案:

答案 0 :(得分:1)

嗯,对于初学者来说,我很确定你的scanf函数的输入是错误的。第一个'%d'将删除字符串中的所有数字,因此变量b,c,d,e,f,g,h,i和j将是未初始化的。

此外,当's'尚未初始化为任何内容时,您正在执行numbers[k] = s;numbers[k + 1] = s;

答案 1 :(得分:1)

上述代码中有许多错误。首先,你的&#34; for&#34;条件错误(k == 10)。其次,仅遍历数组一次是不够的。您需要遍历数组多次,直到不需要进行交换。 (见Bubblesort)

答案 2 :(得分:0)

你的for循环条件在第一次下降,第一步k为0并且检查值为10 (if (k==10) in (k=0;k==10;k++))这将不会执行你的for循环逻辑,并且在第一种情况下你从for循环出来

答案 3 :(得分:0)

帮助您了解排序代码可能出现的问题

英文/伪代码:

Read 10 elements of the array
For each 11 elements ( 0,1,2,3,4,5,6,7,8,9,10 ) of the array 
    if the current element is less of equals to the next element ( including the 12th element when the element index is 11 )
        then
            Store the value in 's' in place of the current element ( what is in 's' might be up to the phase of the moon )
            Store the value of the next element in the current element ( we will never know what was the the mystery value in 's', unless .... )
            Store the value of 's' in the next element ( next comparison will be a big surprise )


Print the 10 elements of the transformed array

公平地表明你的错误可能还不够

让我们有一个卡片类比

  • 洗牌你的52张牌
  • 从牌组中挑选10张牌(7 10 5 4 ......)
  • 看看你手中的第一张牌(例如钻石中的7张)
  • 查看下一个(例如俱乐部的10个)
  • 如果第一个小于或等于第二个那么:
    • 用卡片的顶卡取代第一张卡片(例如:心之女王)
    • 丢掉第一张卡
    • 用第二张卡替换新卡
    • 将新卡放在第二位
  • 看第二张牌(心之王)
  • 看第三张牌(Spade的5张)
    ......让我们跳到第10张卡片
  • 看第10张卡片(ok ....)
  • 看看第11张牌(你将尺寸变形以查看第55维中的另一张牌,它是玫瑰的XZ)
  • 比较这些值(通过应用多维数学,你会发现Shrodinger的猫还活着并且踢了)
  • 太阳越来越接近地球,导致一些奇怪的冰河时代会持续一秒钟 ...
  • 那些没有人会说话的人会给你带来第12张牌 ...
  • 你被一个grue吃掉了

除了尝试查找不存在的值之外,有人建议您查看提供一些易于理解的伪代码的simple sorting algorithm

祝你在学习C的过程中好运