八大排序——直接插入排序
2017-03-19 22:33
267 查看
直接插入排序(Straight Insertion Sort)的基本操作是将一个元素插入到序列已经有序的那一部分中去,从而使序列中有序的部分逐渐扩大,直到整个序列有序。博主认为直接插入排序过程比较容易理解,所以不作过多赘述,直接上代码
直接插入排序的整个过程是一个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)
#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)
相关文章推荐
- 开贴聊八大排序算法之直接插入排序(一)
- 五十道编程小题目 --- 28 八大排序算法 java 之 01直接插入排序
- 八大排序 -- 插入排序 之 【直接插入排序】
- 八大排序之直接插入排序
- 八大排序--直接插入排序
- Java提高 - 八大排序方法之直接插入排序
- PHP之八大排序算法--插入排序(-)直接插入排序
- 八大排序之--直接插入排序
- Java 八大排序之——直接插入排序
- 直接插入排序,希尔排序(java实现)
- 排序算法(插入排序)——直接插入排序
- 直接插入排序
- Java实现直接插入排序
- 数据结构-插入排序-直接插入排序
- 第十章(1).直接插入排序
- OC下的冒泡排序,直接插入排序,折半插入排序
- 排序算法之直接插入排序
- PHP 直接插入排序
- (第十六周项目1)验证算法(1)直接插入排序
- 【数据结构之排序2】直接插入排序