首页 新闻 会员 周边

c语言,自己编了个直接插入排序,输出结果出错,求大神

0
悬赏园豆:200 [已解决问题] 解决于 2015-11-20 12:21
#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;
}
简单的美德的主页 简单的美德 | 初学一级 | 园豆:22
提问于:2015-11-20 11:12
< >
分享
最佳答案
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]在有序中的位置
        }
收获园豆:200
请叫我头头哥 | 大侠五级 |园豆:9382 | 2015-11-20 11:21

 i=0,或者i=1都可以,i=0,j=-1,不满足j>=0,第二个for不执行;这个算法的思想是i之前的元素都是有序,然后在i之前查找a[i]要插入的位置(第二个for的作用)。

请叫我头头哥 | 园豆:9382 (大侠五级) | 2015-11-20 11:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册