在我的插入排序程序中找不到错误

Can't find the bug in my insertion sort program

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int i, j, key, p;
    int  A[] = {1, 3, 2, 4, 9, 8, 7};

    for (j=1; j<7; j++){

        key = A[j];

    //insert A[j] into the sorted sequence 

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

        A[i+i] = key;

   }
   for(i=0; i<7; ++i){

       printf("%d ", A[i]);
   }

   return 0;
}

上述代码应该执行插入排序,但是,我得到的排序结果不理想,只有很少的重复值。我似乎无法弄清楚我哪里出错了。

你打错了。

A[i+i] = key;

应该是

A[i+1] = key;

此外,您还有一个未使用的变量p

您需要对代码稍作修改(拼写错误 A[i+i] = key; 不是唯一的问题)

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

我保留了条件 while(i>0 并更改了偏移量,但您可以保留它们并仅更改这一行 while(i>=0

你的插入排序有两个错误。第一个由 Arun A. S. 指出

  1. A[i+1] = key; 而不是 A[i+i] = key;
  2. while(i>=0 而不是 while(i>0