Skip to content

hklwl/Sort

Repository files navigation

几种常见的排序算法

冒泡排序,插入排序,选择排序,堆排序,快速排序,归并排序。
这六种排序算法是在求职面试中最常见的手撕算法,其中前三种比较简单,时间复杂度为O(n^2),后面三种相对来说,写起来稍微复杂,时间复杂度上也有所改进,文档收集整理了条例比较清晰,记忆起来比较容易的写法,希望能给大家提供一些帮助。
下面简单分析一下几种排序算法的特性:
(1) 冒泡排序:
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现他们的排序与排序要求相反时,就将他们互换。
冒泡排序是最简单容易理解的一种排序算法,排序的时间复杂度取决于数组的初始情况,如果数组初始有序,时间复杂度为O(n),如果初始数组逆序,时间复杂度为O(n^2),它的优点在于排序是稳定的,缺点就是每趟只能确定一个元素的位置,大多数情况下时间复杂度比较高。

(2) 插入排序:
将一个记录插入到已排序好的有序表中,从而得到一个新的,记录数增1的有序表。即先将序列的第一个记录看成是一个有序的子序列,然后从第二个记录逐个进行插入,直至整个序列有序为止。
插入排序同冒泡排序一样,排序的时间复杂度取决于数组的初始情况,插入排序也是稳定的。

(3) 选择排序:
第一趟:从第一个记录开始,将后面n-1个记录进行比较,找到其中最小的记录和第一个记录进行交换;
第二趟:从第二个记录开始,将后面n-2个记录进行比较,找到其中最小的记录和第2个记录进行交换;
...........
第i趟:从第i个记录开始,将后面n-i个记录进行比较,找到其中最小的记录和第i个记录进行交换;
以此类推,经过n-1趟比较,将n-1个记录排到位,剩下一个最大记录直接排在最后;
选择排序时间复杂度为O(n^2),算法不稳定。

About

排序算法

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages