插入排序大家都很熟悉,不看答案, 你能在几分钟内找出以下代码的错误?
#include<stdio.h>
void insert_sort(int arr[])
{
int i,j,temp;
for (i=1;i<8;i++)
{
temp=arr[i];
j=i-1;
for(j;j>=0,arr[j]>arr[i];--j)
{
arr[j+1]=arr[j];
}
arr[j+1]=temp;
}
}
void main()
{
int i;
int a[8]= {3,13,9,100,6,8,10,58};
for(i=0;i<8;i++)
{
printf("%d,",a[i]);
}
insert_sort(a);
printf("\n",i,a[i]);
printf("after sorted a[8]\n");
for(i=0;i<8;i++)
{
printf("%d,",a[i]);
}
}
正确答案:
// for(j;j>=0,arr[j]>arr[i];--j) //wrong, cause arr[i] is corrupted when arr[j+1]=arr[j];
for(j;j>=0,arr[j]>temp;--j)