十种排序算法概览
本文旨在为了忘记时快速回忆起十种排序算法大致分别怎么进行的,没有具体讲解也无具体代码,具体讲解与代码可以参考:算法通关手册01章02节
快速记忆表格
参考b站视频:马士兵说:30秒让你记住所有排序算法-宋词记忆法
快速回忆各算法
重点是插入排序
、归并排序
、堆排序
、快速排序
。为便于理解记忆,称数组中索引小的元素是‘左边’的元素,索引大的元素是‘右边’的元素。
01.冒泡排序
从左往右依次扫描,相邻元素依次比较(索引依次是01,12,23,34……),左右两个元素,左小于等于右不变,右小于左不变。
02.选择排序
从左往右依次扫描,以第
i
i
i个元素为标杆(
i
i
i从
0
0
0到
n
n
n依次增大),从
i
+
1
i+1
i+1以后的元素中选择
最小的元素,若该元素小于第
i
i
i个元素则交换,不然则不变。
03.插入排序(重点)
从左往右依次扫描,前
i
i
i项都是已经用排好的序列(
i
i
i从
0
0
0到
n
n
n依次增大),把第
i
+
1
i+1
i+1项(无序序列的第一项)依次与
i
i
i项及以前的元素比较大小,插入
到合适的位置。
04.希尔排序
Q:既然希尔排序每组内也用的是插入排序,为什么不直接使用插入排序?
A:因为如果分组很多,每个组内元素就比较少,移动、比较、插入的次数就会少一些;
如图,一组内只有4个元素,数字1只需要比较3次,就可以挪到最开头,但如果直接整个序列用插入排序,那次数可就多多了。
而若最后一步gap为1了,挪到的距离又比较少,所以整体复杂度比插入排序少很多。
如图,若到了最后一步,gap为1了,那么由于组内已经排好序了,较小的元素都会比较集中在前面,因此移动的次数也会变少。
05.归并排序(重点)
06.快速排序(重点)
07.堆排序(重点)
08.计数排序
09.桶排序
10.基数排序
练习
LeetCode 912. 排序数组
如果不用内置函数,可以在这道题里把各种算法自己实现一遍