文章标题

来源:互联网 发布:当店家软件 编辑:程序博客网 时间:2024/05/18 20:13

一、各种算法比较

序号 排序类别 时间复杂度 空间复杂度 稳定 1 插入排序 O(n2) 1 √ 2 希尔排序 O(n2) 1 × 3 冒泡排序 O(n2) 1 √ 4 选择排序 O(n2) 1 × 5 快速排序 O(Nlogn) O(logn) × 6 堆排序 O(Nlogn) 1 × 7 归并排序 O(Nlogn) O(n) √

1冒泡排序(Bubble Sort)
每次大的下沉小的上浮,相邻两两比较
如 3 2 1 6 5
一轮后:2 1 3 5 6
二轮后:1 2 3 5 6

2选择排序(Selection Sort)
n-1次操作
每次选出最值与第一个元素交换

有数组aaa[5]={1000,100,1,10000,10}
进行第一次交换后为{1,100,1000,10000,10} 1与1000换
进行第二次交换后为{1,10,1000,10000,100} 10与100换
进行第三次交换后为{1,10,100,10000,1000} 100与1000换
进行第四次交换后为{1,10,100,1000,10000} 1000与10000换

3插入排序(Insertion Sort)
每次增加一个元素排好序

5 | 1 7 3 1 6
1 5 | 7 3 1 6
1 5 7 | 3 1 6
1 3 5 7 | 1 6
1 1 3 5 7 | 6
1 1 3 5 6 7 |

4堆排序
(1) 初始化二叉树
(2) 把最上面的元素与最后一个交换(定下最后一个的位置)
原则上面大于下面,用最值交换
(3) 调整重复(2)直至最后

交换次数不包括初始化二叉树
18,30,35,10,46,38,5,40进行堆排序(假设堆的根节点为最小关键码),在初始建
堆过程中需进行的关键码交换次数是(7)

第一次 30 18 35 10 46 38 5 40
第二次 35 30 18 10 46 38 5 40
第三次 35 30 18 10 46 38 5 40
第四次 46 35 30 18 10 38 5 40
第五次 46 38 35 30 18 10 5 40
第六次 46 38 35 30 18 10 5 40
第七次 46 40 38 35 30 18 10 5 40

5归并排序
核心:分组排序再合并逐渐到一个组

{9,38,65,36,76,13,27,49,11,4}
先把序列分成5组,并组内排序:{9,38},{36,65},{13,76},{27,49},{4,11}
再将组分成3大组:{9,36,38,65},{13,27,49,76},{4,11}
然后分成2大组:{9,13,27,36,38,49,65,76},{4,11}
最后:{4,9,11,13,27,36,38,49,65,76}

6快速排序
(1) 确定一个key(一般设第一个数)
(2) 从后往前再从前往后搜索(以此循环,若小于key则交换)
(3) 最后变成key的左边小于key右边大于key
(4) 再将key左右的数组重复(1)(2)(3)
以下上下对应
|A[0]、 |A[1]、A[2]、 A[3]、A[4]、A[5]、A[6]、A[7]:
24 19 32 43 38 6 13 22
初始关键数据KEY=A[0]=24,第一轮排序中一直不变

  1. 第一次从后往前搜,A[0]>A[7],变换,24 22对换,A[0]=22,A[7]=24,KEY=A[7]=24 结果: 22 19 32 43 38 6 13 24
  2. 第二次从前往后搜,A[1]小于A[7],不变换。A[2]>A[7],变换,32
    24对换,A[2]=24,A[7]=32,KEY=A[2]=24 结果:
    22 19 24 43 38 6 13 32
  3. 第三次从后往前搜,A[2]>A[6],变换,24 13对换,A[2]=13,A[6]=24,KEY=A[6]=24 结果:
    22 19 13 43 38 6 24 32
  4. 第四次从前往后搜,A[3]>A[6],变换,43 24对换,A[3]=24,A[6]=43,KEY=A[3]=24 结果:
    22 19 13 24 38 6 43 32
  5. 第五次从后往前搜,A[3]>A[5],变换,24 6对换,A[3]=6,A[5]=24,KEY=A[5]=24 结果:
    22 19 13 6 38 24 43 32
  6. 第六次从后往前搜,A[4]>A[5],变换,38 24对换,A[4]=24,A[5]=38,KEY=A[4]=24 结果:
    22 19 13 6 24 38 43 32
  7. 即最终排序结果为: 22 19 13 6 24 38 43 32 之后对24两边的子集分别按以上方法排序{22 19 13 6} 24 {38 43 32}

7希尔排序

(1) 确定d(距离),把数组每隔d分组
(2) 组内排序
(3) d减小重复(1)(2)直至d=1
比如,1 5 3 7 18 6 2 9 4
d是3,则分组为
{1 7 2}{5 18 9}{3 6 4}
1 5 3 2 9 4 7 18 6
d是2,则分组为
{1 3 9 7 6}{5 2 4 18}
1 2 3 4 6 5 7 18 9
d是1,则
1 2 3 4 5 6 7 9 18


掌握了思想其他方法类似,望大家尝试自己编程尝试不同方法(大小端、从大到小从小到大排序)

原创粉丝点击