为什么我的代码没有按顺序打印整个数组

时间:2014-04-24 23:38:09

标签: c arrays for-loop

输入一个数组:

ary[] = [11 12 13 14 15 16 17 18 19 20 11 12 13 14 15 16 17 18 19 20 11 12 13 14 15 16 17 18 19 20 11 12 13 14 -1]    (the negative one signifies that it is the end of the array)

输入尺寸:

size = 34

我需要重新排列这个数组,以便它按顺序排列。以下是我的代码:

int x;
int numpasses;
int temp;

for(numpasses = 1; numpasses < size; numpasses++)
{
  for(x = 0; x < size - numpasses; x++)
  {
    if(ary[x] > ary[x + 1] && ary[x] != ary[size - 1])
     {
       temp = ary[x];
       ary[x] = ary[x + 1];  //THIS PORTION SWITHCHES TWO ADJECENT VALUES TO MAKE ARRAY SEQUENTIAL 
       ary[x + 1] = temp;
     }
   }
   int a;
   for(a = 0; a < size; a++)
   {
     printf("%d  ", ary[a]);
   }
 }

这将打印数字如下:

11 11 12 12 13 13 14 14 15 15 16 16 17 17 18 18 19 19 20 11 12 13 14 15 16 17 18 19 20 11 12 13 14

2 个答案:

答案 0 :(得分:0)

这看起来非常像插入排序。 在任何情况下,这里有很多语法错误但忽略了这些错误,问题似乎是你使用if语句而不是while循环来交换值,所以你没有一直进行(如果这样做)义)。

这样的东西会对数组进行排序:

#include <stdio.h>

int main()
{
    int i, j, key, array[8] = {8, 7, 6, 5, 4, 3, 2, 1};

    for (i = 1; i < 8; ++i)
    {
        key = array[i];
        j = i - 1;

        while (j >= 0 && array[j] > key)
        {
            array[j + 1] = array[j];
            --j;
        }

        array[j + 1] = key;
    }

    for (i = 0; i < 8; ++i)
        printf("%d ", array[i]);
    printf("\n");

    return 0;
}

注意我们如何使用while循环迭代地与整个数组进行比较,而不仅仅是与索引相邻的值。

如果我没有正确理解这个问题,请纠正我。

答案 1 :(得分:0)

更换专栏

     if(ary[x] > ary[x + 1] && ary[x] != ary[size - 1])

通过

     if(ary[x] > ary[x + 1] )

对我来说很好。

我会让你弄明白为什么。

<强> PS。

请添加

  printf("\n");
打印阵列后

。它使得在外循环结束时看到的结果更加清晰。