数据结构-排序

排序

插入排序

和前面的比,找到对应位置插入

eg. 49 38 65 97 76 13 27 49
1. 49 #前面没人
2. 38 49 #前面只有49,<49,插到前面
3. 38 49 65
4. 38 49 65 97
5. 38 49 65 76 97
6. 13 38 49 65 76 97
7. 13 27 38 49 65 76 97
8. 13 27 38 49 49 65 76 97

希尔排序

对每一个子表进行直接插入排序

子表:设步长:d=4

下表的子表为49 38 65 97 76

38 65 97 76 13

65.....................27

97.....................49

eg. 49 38 65 97 76 13 27 49
设步长为d=4
子表1:49....76 -> 作插入排序 49...76
子表2:38....13 -> 作插入排序 13...38
子表3:65....27 -> 作插入排序 27...65
子表4:97....49 -> 作插入排序 49...97
(优先级:下>右)
----------------------> 49 13 27 49 76 38 65 97

步长d=d/2
子表1:49....27....76....65 -> 作插入排序 27 49 65 76
子表2:13....49....38....97 -> 作插入排序 13 38 49 97
(优先级:下>右)
-------------------------------> 27 13 49 38 65 49 76 97

步长d=d/2
子表1:27 13 49 38 65 49 76 97 -> 作插入排序 13 27 38 49 49 65 76 97

快速排序

小放枢轴左,大放枢轴右

高低所指换,换针向枢轴

高低所遇处,枢轴所落入

递归再排至,左右仅一头

eg. 49 38 65 97 76 13 27 49
枢轴一般取第一个49,即49存入枢轴,空了low指向的值,所以操作先high

枢轴49

38

65

97

76

13·

27

49

low指针

high指针

high-49 = 枢轴-49;(相当于大于枢轴, 大放枢轴右)不换,high--

枢轴49

38

65

97

76

13·

27

49

low指针

high指针

high-27 < 枢轴-49;( 小放枢轴左)要换,( 高低所指换)low++;

枢轴49

27

38

65

97

76

13·

49

low指针

high指针

low-38 < 枢轴-49;不用换,low++;

枢轴49

27

38

65

97

76

13·

49

low指针

high指针

low-65 >枢轴-49;要换,放到high,high--;

枢轴49

27

38

97

76

13·

65

49

low指针

high指针

high-13 < 枢轴-49;要换,放到low,low++;

枢轴49

27

38

13·

97

76

65

49

low指针

high指针

low-97 > 枢轴-49;要换,放到high,high--;

枢轴49

27

38

13·

76

97

65

49

low指针

high指针

high-76 > 枢轴-49;不用换,high--;low和high重叠填入枢轴值49( 高低所遇处,枢轴所落入

枢轴

27

38

13·

49

76

97

65

49

low指针,high指针

枢轴左右分两块再按上述操作(递归再排至)

枢轴27

38

13·

low

high

枢轴76

97

65

49

low

high

选择排序

查找最小,放前面,重复

eg. 49 38 65 97 76 13 27 49
1. 13 49 38 65 97 76 27 49
2. 13 27 49 38 65 97 76 49
3. 13 27 38 49 65 97 76 49
4. 13 27 38 49 65 97 76 49
5. 13 27 38 49 49 65 97 76
6. 13 27 38 49 49 65 97 76
7. 13 27 38 49 49 65 76 97

冒泡排序

相邻相比较,小的调换,比较完往后再一一比较

eg. 49 38 65 97 76 13 27 49
1. 49 >38 ,38小,不调换->38<65,38小,调换->38<97,38小,调换...
49 65 97 76 38 27 49 13
2. 65 97 76 49 38 49 27 13
3. 97 76 65 49 49 38 27 13

归并排序

将有序的子数列合并

数列1: 3 6 9 33 数列2: 5 8 10 40 54
指针s1指向3,指针s2指向5
s1指向的3和s2指向的5比较,3小,把3放到数列3中,s1++
数列3: 3
s1指向的6和s2指向的5比较,5小,把5放到数列3中,s2++
数列3: 3 5
s1指向的6和s2指向的8比较,6小,把6放到数列3中,s1++
数列3: 3 5 6
s1指向的9和s2指向的8比较,8小,把8放到数列3中,s2++
数列3: 3 5 6 8
s1指向的9和s2指向的10比较,9小,把9放到数列3中,s1++
数列3: 3 5 6 8 9
s1指向的33和s2指向的10比较,10小,把10放到数列3中,s2++
数列3: 3 5 6 8 9 10
s1指向的33和s2指向的40比较,33小,把33放到数列3中,s1不能++,所以s2指向的数放到数列3,并往后遍历,重复得到
数列3: 3 5 6 8 9 10 33 40 54



eg. 49 38 65 97 76 13 27 49
1. 分为8个子数列
49 38 65 97 76 13 27 49
2.两两数列进行归并排序
38 49 65 97 13 76 27 49
3.再两两数列进行归并排序
38 49 65 97 13 27 49 76
4.两数列再进行归并排序
13 27 38 49 49 65 76 97

稳定:插冒归

复杂度:

n2:选帽插

nlog2n:快归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值