直接插入排序C语言实现


直接插入排序即是在要排序的数组中,假设前n-1(n>=2)个数已经是排好序的,现在要把第n个数插入到前n个已经排好序的数组中,使得这n个数也变成有序的,如此反复循环,使得要排序的数组中的最后一个元素也排好序,

        我们可以先假设第一个数是排好序的,然后第二个数和第一个数进行比较,如果第二个数比第一个数大,那么说明前两个数排好序,无需做调整,如果第二个数比第一个数小,那么就把第一个数向后移,将第二个数放在第一个数的位置上,抽象出来就是用a[i]和a[i-1]进行比较,如果a[i]>a[i-1],那么就说明前i个数是已经排好序的,如果a[i]<a[i-1],就让j=i-1,temp=a[i],然后一边将数据a[j]向后移动,一边向前搜索,直到找到a[j]<a[i]时停止,并将temp放到a[j+1]处即可。

 具体代码实现如下:

 

  1. //直接插入排序  
  2.   
  3. #include<stdio.h>  
  4.   
  5. void insertsort(int a[],int n)  
  6. {  
  7.    int i=0,temp=0,j=0;  
  8.    for(i=1;i<n;i++)  
  9.    {  
  10.          
  11.        if(a[i]<a[i-1])  
  12.        {  temp=a[i];  
  13.           for(j=i-1;j>=0&&a[j]>temp;j--)  
  14.               a[j+1]=a[j];  
  15.           a[j+1]=temp;  
  16.        }  
  17.          
  18.    }  
  19.    for(i=0;i<n;i++)  
  20.     {  
  21.       printf("%4d",a[i]);  
  22.     }  
  23.     printf("\n");  
  24. }  
  25.   
  26.   
  27. int main()  
  28. {  
  29.     int i=0,length=0;  
  30.     int a[]={2,6,1,8,4,0,5};  
  31.     length=sizeof(a)/sizeof(a[0]);  
  32.     //printf("%d",length);  
  33.     insertsort(a,length);  
  34.     return 0;  
  35. /// 
  36. int main(int argc,char *argv[])
    {
        string str;
        int i=0,j=0;
        cin>>str;
        char temp;
        int len=str.length();
        for(i=1; i<=len-1; i++){
            int int_str1=str[i]-'0';
            int int_str2=str[i-1]-'0';
            if(int_str1<int_str2){
                temp=str[i];
                for(j=i-1; j>=0 &&(str[j]-'0')>(temp-'0');j--){
                    str[j+1]=str[j];
                }
                str[j+1]=temp;
            }
        }
        cout<<str<<endl;
        return 0;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值