无法在插入排序程序中找到错误

时间:2015-04-27 16:14:50

标签: c algorithm sorting insertion-sort

#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;
}

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

3 个答案:

答案 0 :(得分:3)

你有一个错字。

A[i+i] = key;

应该是

A[i+1] = key;

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

答案 1 :(得分:2)

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

  1. A[i+1] = key;代替A[i+i] = key;
  2. while(i>=0代替while(i>0

答案 2 :(得分:1)

您需要稍微修改一下代码(错误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