算法学习(二)—— 十种排序算法的总结和分析
来源:互联网 发布:淘宝代理一手货源 编辑:程序博客网 时间:2024/05/18 03:50
算法的海洋浩瀚无边!只有不断的学习,才能不断的进步,下面是自己学习过程当中对排序相关算法的笔记和总结,参考资料均来自网络。
一、排序算法概论
排序算法,就是如何使得记录按照要求排列的方法。本文一共总结了十总排序算法,如下图所示。
二、交换排序
2.1 冒泡排序
【算法说明】:最简单的、稳定的排序算法。
【算法思想】:不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,以此类推。
【算法模拟】:下面以对 [ 3 2 4 1 ] 进行冒泡排序说明。
第一轮 排序过程:
[ 3 2 4 1 ] (最初)
[ 2 3 4 2 ] (比较3和2,交换)
[ 2 3 4 1 ] (比较3和4,不交换)
[ 2 3 1 4 ] (比较4和1,交换)
第一轮结束,最大的数4已经在最后面,因此第二轮排序只需要对前面三个数进行再比较。
第二轮 排序过程:
[ 2 3 1 4 ](第一轮排序结果)
[ 2 3 1 4 ](比较2和3,不交换)
[ 2 1 3 4 ](比较3和1,交换)
第二轮结束,第二大的数已经排在倒数第二个位置,所以第三轮只需要比较前两个元素。
第三轮 排序过程:
[ 2 1 3 4 ] (第二轮排序结果)
[ 1 2 3 4 ] (比较2和1,交换)
至此,排序结束。
【算法实现】:
2.2 快速排序
【算法说明】:快排是冒泡排序的改进版,也是实际项目中最长用到的排序算法。理解快排主要分两点:分治 + 递归 ,分治是指根据一个基数将序列分成两块,左子块<右子块;递归是指按分治思想一直分下去,直到子块只有一个元素的时候停止,此时已经排好序了。
【算法思想】:将所要进行排序的数分为左右两个部分,其中一部分的所有数据都比另外一部分的数据小,然后将所分得的两部分数据进行同样的划分,重复执行以上的划分操作,直到所有要进行排序的数据变为有序为止。
【算法模拟】:下面以对 [32 12 7 78 23 45 ] 进行快速排序进行说明。
【算法实现】:
三、选择排序
3.1 直接选择排序
【算法说明】:选择排序是一种不稳定的排序算法,可能会打乱两个相同数字的原有顺序。
【算法思想】:选择排序(从小到大)的基本思想是,首先,选出最小的数,放在第一个位置;然后,选出第二小的数,放在第二个位置;以此类推,直到所有的数从小到大排序。
【算法模拟】:在实现上,我们通常是先确定第i小的数所在的位置,然后,将其与第i个数进行交换。下面以对 [ 3 2 4 1 ] 进行选择排序说明,使用min_index 记录当前最小的数所在的位置。
第1轮 排序过程 (寻找第1小的数所在的位置)
[ 3 2 4 1 ](最初, min_index=1)
[ 3 2 4 1 ](3 > 2, 所以min_index=2)
[ 3 2 4 1 ](2 < 4, 所以 min_index=2)
[ 3 2 4 1 ](2 > 1, 所以 min_index=4, 这时候确定了第1小的数在位置4)
[ 1 2 4 3 ](第1轮结果,将3和1交换,也就是位置1和位置4交换)
第2轮 排序过程 (寻找第2小的数所在的位置)
[ 1 2 4 3 ](第1轮结果, min_index=2,只需要从位置2开始寻找)
[ 1 2 4 3 ](4 > 2, 所以min_index=2)
[ 1 2 4 3 ](3 > 2, 所以 min_index=2)
[ 1 2 4 3 ](第2轮结果,因为min_index位置刚好在第2个位置,无需交换)
第3轮 排序过程 (寻找第3小的数所在的位置)
[ 1 2 4 3 ](第2轮结果, min_index=3,只需要从位置2开始寻找)
[ 1 2 4 3 ](4 > 3, 所以min_index=4)
[ 1 2 3 4 ](第3轮结果,将3和4交换,也就是位置4和位置3交换)
至此,排序完毕。
【算法实现】:
3.2 堆排序
要想理解堆排序,先要知道什么是堆,怎么建立堆,怎么操作堆中的元素,要说清楚堆排序,篇幅太长,
所以找了一个讲的很详细的博客,可以点击进去学习堆排序的相关知识:
http://www.cnblogs.com/mengdd/archive/2012/11/30/2796845.html
四、插入排序
4.1 直接插入排序
【算法说明】:插入排序是排序算法的一种,它不改变原有的序列(数组),而是创建一个新的序列,在新序列上进行操作。
【算法思想】:插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。
【算法模拟】:下面,以对[ 3 2 4 1 ] 进行选择排序说明插入过程,使用j记录元素需要插入的位置。排序目标是使数组从小到大排列。
第1轮[ 3 ] [ 2 4 1 ] (最初状态,将第1个元素分为排序好的子数组,其余为待插入元素)[ 3 ] [ 2 4 1 ] (由于3>2,所以待插入位置j=1)[ 2 3 ] [ 4 1 ] (将2插入到位置j)
第2轮[ 2 3 ] [ 4 1 ] (第1轮排序结果)[ 2 3 ] [ 4 1 ] (由于2<4,所以先假定j=2) [ 2 3 ] [ 4 1 ] (由于3<4,所以j=3) [ 2 3 4 ] [ 1 ] (由于4刚好在位置3,无需插入)
第3轮 [ 2 3 4 ] [ 1 ] (第2轮排序结果) [ 2 3 4 ] [ 1 ] (由于1<2,所以j=1)
【算法实现】:
【算法说明】:插入排序是排序算法的一种,它不改变原有的序列(数组),而是创建一个新的序列,在新序列上进行操作。
【算法思想】:插入排序的基本思想是,将元素逐个添加到已经排序好的数组中去,同时要求,插入的元素必须在正确的位置,这样原来排序好的数组是仍然有序的。
4.2 希尔(Shell)排序
【算法说明】:一
【算法思想】:一
【算法模拟】:下
【算法实现】:一
【算法说明】:一
【算法思想】:一
五、归并排序
5.1 归并排序
【算法说明】:一
【算法思想】:一
【算法模拟】:下
【算法实现】:一
【算法说明】:一
【算法思想】:一
六、计数排序
七、桶排序
6.1 计数排序
【算法说明】:一
【算法思想】:一
【算法模拟】:下
【算法实现】:一
【算法思想】:一
七、桶排序
7.1 桶排序
【算法说明】:一
【算法思想】:一
【算法模拟】:下
【算法实现】:一
【算法思想】:一
八、基数排序
8.1 基数排序
【算法说明】:一
【算法思想】:一
【算法模拟】:下
【算法实现】:一
【算法思想】:一
0 0
- 算法学习(二)—— 十种排序算法的总结和分析
- JavaScript学习总结(15)——十大经典排序算法的JS版
- 排序算法总结分析(二)——常见八大排序算法
- 常见的十种排序算法总结
- 十种排序算法总结
- Java学习与技术总结——(二)神奇的排序算法
- (二)几种排序算法的学习总结(归并排序)
- 算法学习—排序总结
- 排序算法的分析总结
- 对数据结构和算法的总结和思考(二)--简单排序算法
- 排序算法分析(二)
- 排序算法总结(二)
- 排序算法总结(二)
- 排序算法总结(二)
- 排序算法总结(二)
- 排序算法总结(二)
- 算法--排序算法的介绍与总结(二)
- 常见的十种排序算法归纳总结
- tar相关命令
- 微信小程序
- 学习路线
- 使用CStatic显示图片(bmp、ico、png)
- 论如何实现财务独立
- 算法学习(二)—— 十种排序算法的总结和分析
- Java程序设计上机三
- heartbeat v2 haresource配置高可用集群
- 数论常见计算与证明
- 软件测试怎样拿高工资
- 【codevs 1090】加分二叉树(记忆化搜索)
- 二级C复习13
- imageloder2
- C控制语句:分支和跳转