1
#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]没有得到排序,但其余的值 froma[1]得到a[5]排序

4

2 回答 2

3

问题是>0

while(i>0 

这应该读

while(i>=0 

此外,还有未定义的行为

    k = a[j];

j==6.

于 2013-01-06T09:40:42.460 回答
0
while(i>-1 && a[i]>k)
        {
           a[i+1] = a[i];
           i = i-1;
        }

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

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

希望对你有帮助

于 2013-01-06T09:40:01.060 回答