在插入排序期间,第一个元素不会被排序

时间:2013-01-06 09:35:08

标签: c++

#include <stdio.h>
#include <conio.h>

int main() 
{

    int a[6] = {5,2,4,6,1,3};
    int j,i,k,cnt=1;
    for (j=1;j<7;j++)
    {
        k = a[j];
        i = j-1;
        while(i>0 && a[i]>k)
        {
            a[i+1] = a[i];
            i = i-1;
        }
        a[i+1] = k;
    }
    for(i=0;i<6;i++) 
    {
        printf("\n Final op %d",a[i]);
    }
    getch();
}

我在静态数组中传递了一些元素,但第一个元素是值

a[0]未进行排序,但a[1]a[5]的其余值已排序

2 个答案:

答案 0 :(得分:3)

问题是

中的>0
while(i>0 

这应该是

while(i>=0 

此外,

中存在未定义的行为
    k = a[j];

j==6

答案 1 :(得分:0)

while(i>-1 && a[i]>k)
        {
           a[i+1] = a[i];
           i = i-1;
        }

只进行此更改,您的插入排序将完美运行。

它没有被排序,因为数组从[0] n开始,当它在[0]时终止,所以不访问它的元素。

希望它能帮到你