输入一个数组:
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
答案 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");
打印阵列后。它使得在外循环结束时看到的结果更加清晰。