插入排序


     插入排序的思想便是“逐个比较”。


    1   文字表述:    

    

1)设置一个循环,从第二个数字开始(索引为1)不断与前面的数字相比。
2)每次循环开始时作为比较的数的索引为j,设置temp为其值。(因为比如将”8“赋值到”7“的位置时,如果不将”7“保存起来,那么便丢失了这个数字。)
3)取得j的前一位i。
4)只要i仍在数组中,并且索引为i处的值大于temp,就将i后一位的值设为i处的值,同时将i减1。
5)在i不在数组中或i处的值不必temp大时结束第四部的循环,然后将i后一位的值设置为temp。


    2    伪码表示:

INSERTION-SORT(A)
   for j = 2 to A.length                  // 代价c1,次数n   
       temp=A[j];                         // 代价c2,次数n-1
       // 将A[j]插入到已排序的A[1..j-1]      // 代价0,次数n-1
       i=j-1;                             // 代价c4,次数n-1
       while i>0 and A[i]>temp            // 代价c5  
           A[i+1]=A[i];                   // 代价c6
           i=i-1;                         // 代价c7       
       A[i+1]=temp;                       // 代价c8,次数n-1

   3     算法实现:

#include<stdio.h>

void insort(int a[],int n);

int main(){
    int array[5],num;
    printf("数组长度:\n");
    scanf("%d",&num);
    printf("pls input\n");
    for(int i=0;i<num;i++){
        scanf("%d",&array[i]);}
    insort(array,num);
    for(int i=0;i<num;i++)
        printf("%d",array[i]);
    return 0;
    
}
void insort(int a[],int n){
    for(int j=1;j<n;j++){
        int key=a[j];
        int i=j-1;
        while(i>0&&a[i]>key){
            a[i+1]=a[i];
            i=i-1;
        }
        a[i+1]=key;
    }
}

   

   







          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值