基本排序算法:
1、冒泡排序:此为基础中的基础,从头开始遍历,将路上的最大或最小元素“转移”至最左侧或者最右侧,冒泡之名就是这么来的 —— 一个一个的冒头。
2、插入排序:分为直接插入排序、折半插入排序以及希尔排序,希尔排序在后面会讲到,此处略过。
插入排序的思想很简单,就像玩扑克牌,手中一开始没有牌,从发给自己的牌堆中一张一张的拿出来然后放到手中,直接放到最终的位置。
3、选择排序
直接选择排序:在待排数组中直接查找到最小的,然后与第一个元素交换位置,后面再从第2~n个元素中查找最小的与第2个元素交换位置,以此类推完成排序。
进阶排序算法:
归并排序:将待排数组分为多个互不相交的较小子数组,分别对其进行排序然后再进行合并
合并方法:两个子数组各取一个元素a、b,将较小的(设a<b)放到目标区域,然后再从a所在的小数组拿一个,再次与b比较,最后如果有一堆有剩下的,直接放在后面即可。
快速排序:与归并排序相似,也是分为多个互不相交的较小子数组,分别对其进行排序然后再进行合并,不同之处在于归并排序的分解是随便的,而快速排序的分解则是有迹可循的,待排数组所分解得到的两个子数组,肯定某个子数组的所有元素均小于另一个子数组的所有元素。
希尔排序:分为三步,①将待排序列分组;②对每组数据进行直接插入排序;③对整个序列进行直接插入排序。(分组方法:给定一个步长d,下标相差d的元素分到一个组,每次子序列排好序后缩小d)
线性时间排序算法:
计数排序:对于已知元素取值范围的序列,可记录小于等于某个元素的元素个数,这样遍历一遍即可得到每个元素的最终位置,达到线性时间的算法时间复杂度。
桶排序:运用了区间的思想,将所有元素所在的大区间分为多个不同的小区间,分别对各个区间的元素进行排序,然后进行合并。
基数排序:对序列中元素的各个位进行排序,排序方法分为MSD(最高位优先方法,从左向右,即高位到低位)和LSD(最低位优先方法,从右向左,即低位到高位)。
原文:https://www.cnblogs.com/hfut-zxq/p/10850147.html