排序算法笔记

jefferw-blogs / 2023-09-05 / 原文

排序算法笔记

冒泡排序

算法介绍

冒泡排序是对于长度为 n n n 的序列,重复执行 n n n 次将 a i a_i ai a i a_i ai + _+ + 1 _1 1 ( 1 ⩽ i ⩽ n − 1 ) {\color{Gray} (1 \leqslant i \leqslant n-1)} (1in1)进行比较的算法。

时间复杂度

综上所述,冒泡排序的时间复杂度是 O ( n 2 ) O(n^2) O(n2)

动图

(与描述有细微差别)
冒泡排序动图

选择排序

算法介绍

选择排序是对于长度为 n n n 的序列,先固定好需要排序的数 a i a_i ai 再寻找接下来 最小的数 a j a_j aj a i a_i ai 对调 ( 1 ⩽ i < j ⩽ n ) {\color{Gray} (1 \leqslant i <j \leqslant n)} (1i<jn) 的算法。

时间复杂度

综上所述,选择排序的时间复杂度是 O ( n 2 ) O(n^2) O(n2)

动图

选择排序动图

插入排序

算法介绍

插入排序是对于长度为 n n n 的序列,先取出需要排序的数 a i a_i ai 再寻找适合其的间隙插入 ( 1 ⩽ i ⩽ n ) {\color{Gray} (1 \leqslant i \leqslant n)} (1in) 的算法。

时间复杂度

综上所述,插入排序的时间复杂度是 O ( n 2 ) O(n^2) O(n2)

动图

插入排序动图

归并排序

算法介绍

归并排序是使用递归(分治)来实现的排序算法。归并排序对于长度为 n n n 的序列,把序列对半分进行两次递归,直至 n ⩽ 2 n \leqslant 2 n2;若 n ⩽ 2 n \leqslant 2 n2 则把序列进行排序;当递归程序返回时,则再把返回的数据进行排序。

时间复杂度

综上所述,归并排序的时间复杂度是 O ( n l o g n ) O(nlogn) O(nlogn)

动图

归并排序动图

快速排序

算法介绍

快速排序是使用递归(分治)来实现的排序算法。快速排序对于长度为 n n n 的序列,先找一个基准数 a i a_i ai ,把序列小于基准数的放在基准数前面,其余的放后面,一直递归基准数前面的序列,直至基准数前面的序列长度为1,接着再递归基准数后面的数。

时间复杂度

综上所述,快速排序的时间复杂度是 O ( n 2 ) O(n^2) O(n2)

动图

快速排序动图

若有错误,欢迎指正

未经原作者许可不得转载

图源:网络,侵删