就是这是一个简单的希尔排序,然后就在第三个for循环语句里,第一个是arr[j] > key跑出来数对的,但是第二个arr[j] > arr[i]它跑出来的结果不对,我想的是key和arr[i]的值不是相等的吗,为什么出来的结果不一样
#include
#include
int main()
{
int arr[10] = { 17,65,35,9,8,12,93,75,42,32 };
int j, key, n;
for (int n = 10 / 2; n > 0; n /= 2)
{
for (int i = n; i < 10; i++)
{
key = arr[i];
j = i - n;
for (; j >= 0 && arr[j] > key; j -= n)//就是这个for,key换成arr[i]之后结果就不对了
{
arr[j + n] = arr[j];
}
arr[j+n] = key;
}
}
for (int i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
}
我想的是key和arr[i]的值不是相等的吗
===当然不想等啊。key = arr[i]是用key来记录当前第i个元素值。但在下面的for循环过程中,由于存在arr[j + n] = arr[j];这个过程是有可能改变arr数组第i个元素的值的,如果for循环中是arr[j]>arr[i],这个arr[i]值是会变的!!!!但key是不会变的!!!!!
你的错误是刻舟求剑啊