您的位置:首页 > 其它

常用排序算法思想总结

2016-11-01 17:24 225 查看
1、冒泡排序

通过与相邻元素的比较和交换来把小的数交换到最前面。这个过程类似于水泡上升一样,因此得名。

冒泡排序的时间复杂度为O(n^2)。

2、(简单)选择排序

第一次遍历“选择”出所有元素中最小的元素,第二次遍历“选择”出剩下元素中最小的元素,依此类推。选择排序得名于这个“选择”过程。

选择排序的时间复杂度为O(n^2)。

3、插入排序

插入排序的过程与抓牌(扑克牌)的过程一致。

抓第一张牌时,牌便在正确的位置;抓第二张牌,将牌跟第一张牌比较,找到正确位置插入;抓到第三张牌时,将牌跟前面的两张牌比较,找到正确位置插入,依此类推。插入排序得名于这个“插入”过程。

选择排序的时间复杂度为O(n^2)。

4、快速排序

快速排序的思路是,选中第一个元素作为比较的基准,再使用两个指针分别指向序列的第一个和最后一个元素(暂叫左右指针),先从右指针开始,依次减一,将右指针指向的元素和基准值进行比较,当找到小于基准值的元素时,两者进行交换;接着左指针依次加一,将指针所指元素和基准值进行比较,当找到大于基准值的元素时,两者进行交换,随后再将右指针依次减一,左指针依次加一,不断重复前面的过程,依此类推,直到左右指针相逢,结束整个操作过程。经过操作后,会将序列分成两部分,基准元素前面的元素都小于基准元素的值,基准元素后面的元素都大于基准元素的值。接着使用递归对前后两部分采用前面相同的逻辑进行处理,最终完成整个排序过程。

快速排序使用的排序思想是:冒泡+二分+递归分治。

快速排序的时间复杂度为O(nlgn)。应该得名于此吧。

5、希尔排序

先将整个待排序序列分割成为若干子序列分别进行直接插入排序,待整个序列基本有序时再对全体记录进行一次直接插入排序。所以希尔排序是插入排序的一种高效率的实现,也叫缩小增量排序。

希尔排序的时间复杂度为O(n^1.3)。

6、归并排序

归并排序的基本思想是:先两两合并排序,再四四合并排序,依次类推。

本质思想是递归分治的思想。

归并排序的时间复杂度为O(nlgn)。

归并排序的空间复杂度为O(n)。

7、计数排序

当待排序的数是满足一定范围的整数,而且可以提供比较多的辅助空间时,可以考虑计数排序。

其思想是,用待排序的数作为数组的下标,统计每个数字的个数,然后依次输出即可得到有序序列。

计数排序的时间复杂度为O(n)。

8、堆排序

堆排序的核心思想是构建堆(大根堆/小根堆),删除堆顶,重新调整堆,再删除堆顶,依此类推,得到排序序列。

推排序的重要意义在于最快的找到最大最小值。因此,在实践中,堆的用途不在排序,而是调度算法,比如优先级调度。

堆排序的平均时间复杂度为O(n*logn)。

9、桶排序

桶排序是计数排序的变种,把计数排序中相邻的m个”小桶”放到一个”大桶”中,在分完桶后,对每个桶进行排序(一般用快排),然后合并成最后的结果。

桶排序的平均时间复杂度为线性的O(n+c),其中c为桶内快排的时间复杂度。

10、基数排序

将待排数据中的每组关键字依次进行桶分配。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息