文章标题
来源:互联网 发布:当店家软件 编辑:程序博客网 时间:2024/05/18 20:13
一、各种算法比较
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,第一轮排序中一直不变
- 第一次从后往前搜,A[0]>A[7],变换,24 22对换,A[0]=22,A[7]=24,KEY=A[7]=24 结果: 22 19 32 43 38 6 13 24
- 第二次从前往后搜,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 - 第三次从后往前搜,A[2]>A[6],变换,24 13对换,A[2]=13,A[6]=24,KEY=A[6]=24 结果:
22 19 13 43 38 6 24 32 - 第四次从前往后搜,A[3]>A[6],变换,43 24对换,A[3]=24,A[6]=43,KEY=A[3]=24 结果:
22 19 13 24 38 6 43 32 - 第五次从后往前搜,A[3]>A[5],变换,24 6对换,A[3]=6,A[5]=24,KEY=A[5]=24 结果:
22 19 13 6 38 24 43 32 - 第六次从后往前搜,A[4]>A[5],变换,38 24对换,A[4]=24,A[5]=38,KEY=A[4]=24 结果:
22 19 13 6 24 38 43 32 - 即最终排序结果为: 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
掌握了思想其他方法类似,望大家尝试自己编程尝试不同方法(大小端、从大到小从小到大排序)
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 自定义滚轮选择器Wheelview
- Sereja ans Anagrams CodeForces
- 错误记录:Java compiler level does not match解决方法
- jvisualvm 调用远程服务
- POJ3258 River Hopscotch 二分
- 文章标题
- PAT B1022. D进制的A+B
- UIKeyboardLayoutStar release] message sent to deallocated instance
- 天天说高并发,你知道高并发是啥吗?俗语聊高并发保证你能听懂
- HDU-2017 多校训练赛1-1006-Function
- jmeter不使用图形化的方式在linux下进行压测
- [LeetCode]638. Shopping Offers
- 学习网站
- ubuntu 修改权限