数据结构学习10——直接插入排序与希尔排序
2014-07-08 18:01
471 查看
把直接插入排序与希尔排序放在一块讲是因为希尔排序中涉及到了直接插入排序,且希尔排序是把很多个记录“模块化”处理的一种方式,然后再进行直接插入排序。
直接插入排序:
算法思想:就是将一个记录插入到已经排好的有序表中,从而得到一个新的、记录增1的有序表
直接插入排序算法实现:
直接插入排序算法说明:
问题:上述中有两个对r[j+1]的赋值,两个r[j+1]是否是同一个位置?有什么意义?
这个问题对于初学者而言都是个比较难理解的问题,对于第一个r[j+1]还好理解,但是对第二个就比较难理解了,其实这儿也不是很难理解,因为执行了一句语句以后,j--了,所以说第二r[j+1]相对于第一个j+1其实是提前了一个位置。
希尔排序:
弄清希尔排序之前我们还是先提出几个问题?
(我感觉还是不是很懂。。起码我是)
|
|
|
貌似上面有这么几步:得有子序列(怎么来?)------可以这样:将相距某个“增量”的记录组成一个子序列。这样在子序列内进行直接插入排序后额结果是基本有序的。
算法实现:
说明:首先引入了increment的变量-----就是那个增量(初始值:等于待排序的记录数)
其实希尔排序就是直接插入排序的一种,只不过希尔排序引入了增量的概念,这就造成了其排序的交换次序是一种“增量”的跨度排序。
直接插入排序:
算法思想:就是将一个记录插入到已经排好的有序表中,从而得到一个新的、记录增1的有序表
直接插入排序算法实现:
#include <stdio.h> int insertSort(int *r,int length) { int i,j; for(i=2;i<length;i++) { if(r[i]<r[i-1]) { r[0]=r[i];//设置为哨兵 for(j=i-1;r[j]>r[0];j--) r[j+1]=r[j]; r[j+1]=r[0]; } } return *r; } int main() { int r[6]={0,5,3,4,6,2}; int i; for(i=1;i<6;i++) { printf("before insert sort: %d\n",r[i]); } insertSort(r,6); for(i=1;i<6;i++) { printf("after insert sort: %d\n",r[i]); } }
直接插入排序算法说明:
问题:上述中有两个对r[j+1]的赋值,两个r[j+1]是否是同一个位置?有什么意义?
这个问题对于初学者而言都是个比较难理解的问题,对于第一个r[j+1]还好理解,但是对第二个就比较难理解了,其实这儿也不是很难理解,因为执行了一句语句以后,j--了,所以说第二r[j+1]相对于第一个j+1其实是提前了一个位置。
希尔排序:
弄清希尔排序之前我们还是先提出几个问题?
为什么要提出希尔排序这种算法?
希尔排序可以增加速率,其时间复杂度为:O(nlogn)希尔排序是怎么操作的?
基本的思路来源于:将原本含有大量记录数的记录进行分组。分割成若干个子序列,此时相对而言每个子序列待排序的记录个数就比较少了。然后在这些子序列内分别进行直接插入操作,此时当整个序列都基本有序时,再对全体记录进行一次直接插入排序。(我感觉还是不是很懂。。起码我是)
|
|
|
貌似上面有这么几步:得有子序列(怎么来?)------可以这样:将相距某个“增量”的记录组成一个子序列。这样在子序列内进行直接插入排序后额结果是基本有序的。
算法实现:
说明:首先引入了increment的变量-----就是那个增量(初始值:等于待排序的记录数)
其实希尔排序就是直接插入排序的一种,只不过希尔排序引入了增量的概念,这就造成了其排序的交换次序是一种“增量”的跨度排序。
相关文章推荐
- java数据结构之插入排序(直接插入排序、折半插入排序、希尔排序)
- 一步步学习数据结构和算法之直接插入排序效率分析及java实现
- 数据结构10-排序方法之直接插入排序的实例
- 数据结构_希尔排序(分组加直接插入排序)
- 数据结构排序--直接插入和希尔排序
- 数据结构学习之直接插入排序
- 10-1-直接插入排序-内部排序-第10章-《数据结构》课本源码-严蔚敏吴伟民版
- 【数据结构】-直接插入排序、希尔排序Java实现
- 数据结构-直接插入排序与希尔排序
- 小蚂蚁学习数据结构(35)——直接插入排序
- 和小强一起学习数据结构java版之直接插入排序
- 图解"数据结构--内部排序算法"----插入排序:直接插入排序、希尔排序
- 数据结构的排序用直接插入、折半插入、希尔排序、快速排序
- 数据结构-排序: 插入排序(直接插入排序法)
- 关于插入排序 直接插入排序和希尔排序
- 【数据结构】排序算法(一)之直接插入排序,冒泡排序
- 排序算法: 冒泡排序, 快速排序,希尔排序,直接插入排序 ,直接选择排序,归并排序,堆排序
- 【排序】从直接插入排序到希尔排序
- 插入排序--直接插入排序和希尔排序
- 程序员必知的8大排序(一)-------直接插入排序,希尔排序(java实现)