您的位置:首页 > 其它

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

2017-03-19 22:33 267 查看
直接插入排序(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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息