八大排序——直接插入排序

来源:互联网 发布:敬汉卿 知乎 编辑:程序博客网 时间:2024/05/21 06:43

直接插入排序(Straight Insertion Sort)的基本操作是将一个元素插入到序列已经有序的那一部分中去,从而使序列中有序的部分逐渐扩大,直到整个序列有序。博主认为直接插入排序过程比较容易理解,所以不作过多赘述,直接上代码

#include<stdio.h>void main(){    int a[6]={5,6,8,4,6,9};    int length=sizeof(a)/sizeof(int);    int temp;    int i,j;    for(i=1;i<length;i++){        if(a[i]<a[i-1]){            temp=a[i];            for(j=i-1;j>=0&&a[j]>temp;j--){                a[j+1]=a[j];                        }            a[j+1]=temp;        }    }    for(i=0;i<length;i++){        printf("%d\t",a[i]);    }    printf("\n");}

直接插入排序的整个过程是一个for循环嵌套了一个if条件判断语句,if语句中又嵌套着一个for循环。外层for循环的每一步都是直接进行if条件判断,比较a[i]和a[i-1],若不符合条件则说明有序,for循环直接跳入下一层,若符合则说明无序,进入if语句,将较小的一个元素赋给”哨兵“temp,紧接着进入代码12到14行的for循环,这个循环是将”合适位置“与a[i]之间的所有元素统一向后移动一位,直到找到”合适位置“也就是说for循环不满足循环条件的时候,将temp的值放入到“合适位置”,”哨兵“temp的作用就是保存待插入元素,以免移动造成其数据丢失
注:直接插入排序算法的时间复杂度为O(n^2)

1 0
原创粉丝点击