152day(插入排序(折半插入排序,希尔排序),归并排序(k路归并),基数排序(桶排序))

本文详细介绍了多种排序算法,包括直接插入排序、折半插入排序、希尔排序等内部排序方法,以及归并排序的不同实现方式,还讲解了基数排序中的桶排序算法。

《2018年3月11日》【连续152天】

标题:插入排序(折半插入排序,希尔排序),归并排序(k路归并),基数排序(桶排序);

内容:
A.直接插入排序就是将要插入的数放在一个有序数列中第一个大于它的数的位置,该位置的数和其后的数都退一位;

折半插入排序:插入排序耗时态度,可用折半法进行优化:

进行比较时,优先于中间数比较;
希尔排序(Shell's Sort):又称缩小增量排序,是不稳定排序;

如图,按照增量,把距离为增量的数放到一组进行直接插入排序;

然后逐步减小增量,直到增量为1;

第一趟增量为5,然后是3,1;

B.2路归并之前学过,今天学习了一下k路归并:
方法一:模仿2路归并。将k个排好序的数组的头一个元素取出,进行比较,将最小的放到新数组中,然后取最小数组的下一个元素,在进行比较;

 

方法二:利用最小堆的性质:

将每个数列的第一个元素取出,用堆排序选出最小的,然后将其队列的下一个元素放入堆中,

这里就要考虑当取出最小元素时,其队列是否有下一个元素:

可以设一个无穷大值,放在每个队列之后,

也可以进行如下操作:
将root输出时,将末尾元素放在root处,然后用minheapify进行整理,这样,最小堆的大小就变成了K-1;

 

方法三:胜者数k路归并:

其实就是对最小元素进行锦标赛排序:

 

把堆顶的元素输出后,进行整理,再在底部输入新元素,与最小堆方法类似;

 

基数排序:多关键字的排序

这里主要讲桶排序:
且是十位数基数排序:

例: 54    37   78  97  87   74  64  77

先将这些数按照个位数进行桶分类:

4: 54    74  64

7:37     97    87   77

8:78

然后按顺序取出,再按照十位数进行桶分类:
3:37

5:54

6:64 

7:74  77  78

8:87

9:97

 

 

网上还有其他桶排序的方法:
是将数的范围放到一个数组中,例如排序百位数以下的数,就建立一个a[101]的数组,置0,然后进行数数,

遇到15,就a[15]++;
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值