希尔排序里的一点小问题

就是这是一个简单的希尔排序,然后就在第三个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是不会变的!!!!!
你的错误是刻舟求剑啊