问题描述
- c语言,自己编了个直接插入排序,可是却输出不了正确的结果,找不到哪里错了,求大神指点
-
#include
#include
void Straightinsertionsort(int a[])
{
int i,j,k;
int b[10]={0};
b[0]=a[0];
for(i=1;i
{
for(j=i-2;j>=0;j--)
{
if(a[i]>b[j])
{
for(k=i-2;k>j;k--)
{
b[k+1]=b[k];
}
b[j+1]=a[i];
}
}
}
for(i=0;i<10;i++)
{
printf("%d",b[i]);
}
}
int main()
{
int a[10]={0};
int i;
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
Straightinsertionsort(a);
return 0;}
解决方案
for(i = 0; i < len; i ++){
tmp = a[i];
for(j = i - 1; j >= 0; j --){
if(tmp < a[j]){
//小于a[j],则a[j]向后移动
a[j + 1] = a[j];
}else{
//若tmp>=a[j],则说明找到a[i]的插入位置,跳出循环
break;
}
}
a[j + 1] = tmp;//j之后的位置就是a[i]在有序中的位置
}
解决方案二:
lz你的代码不完整,第一个for循环的i这里,而且i从1开始,下面的j=i-2不就有问题了么
时间: 2024-08-18 05:15:56