排序算法---直接插入算法
来源:互联网 发布:java编写菱形图案 编辑:程序博客网 时间:2024/05/01 23:04
直接插入算法
直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的,记录数增1的有序表。
假设待排序的记录存放在数组R[1..n]中。初始时,R[1]自成1个有序区,无序区为R[2..n]。从i=2起直至i=n为止,依次将R[i]插入当前的有序区R[1..i-1]中,生成含n个记录的有序区。
例如:
假设待排序元素为49,38,65,97,76,13,27,49
那么第一趟排序将49作为已经排好序的顺序表,将后边的38与之比较,可知38<49,所以38进入到临时存储位置,而前边的有序表后移,也就是将49后移,同时,将38从临时存储位置调到49前面的位置。
38 49 65,97,76,13,27,49 //假设49是排好序的表,将38移到临时存储位置
38 49,65,97,76,13,27,49//将有序表后移,也就是49后移
38,49,65,97,76,13,27,49//将38从临时存储位置调到49前面的位置
第二趟排序:
38,49,65,97,76,13,27,49 //38,49是排好序的表,将65与49比较大于49不移动
38,49,65,97,76,13,27,49
第三趟排序:
38,49,65,97,76,13,27,49 //38,49,65是排好序的表,将97与65比较大于65不移动
第四趟排序
38,49,65,97,76,13,27,49
第五趟排序
38,49,65,76,97,13,27,49
……
最后结果:
13,27,38,49,49,65,76,97
直接插入排序稳定,空间复杂度为O(1),平均时间复杂度为O(n^2)
代码:
/*直接插入排序,假设L为顺序表结构,其中数组r存储数据,length为数组的长度*/void Insertsort(Sqlist *L){ int i,j; for (i=2;i<=L->length;i++)//假设第一个是已经排好序 { if(L->r[i]<L->r[i-1])) L->r[0]=L-r[i]; for(j=i-1;L->r[j]>L->r[0];j--)//元素后移 { L->r[j+1]=L->r[j] } L->r[j+1]=L->r[0]; }}
- 直接插入排序算法
- 直接插入算法排序
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- 直接插入排序算法
- android开发之AlertDialog
- 失去偏执的苹果会怎样?Android 会一统天下吗?
- 【DP】Longest Valid Parentheses
- 第一章-Qt入门,1.2 建立连接
- servlet 相对路径
- 排序算法---直接插入算法
- LED显示模块
- 勤劳的算法-穷举法
- java中hashcode()和equals()的详解
- 不要让急躁左右自己
- hdu 1157
- LeetCode 34 — Search for a Range(C++ Java Python)
- C#-截取字符串----ShinePans
- debug G++: Internal Error: Killed (Program Cc1plus)