数据结构——排序

个人理解,仅供参考 ─=≡Σ(((つ??ω??)つ

排序就是将无序的记录变为有序的记录。

判断排序方法是否的稳定:当记录中存在相同的关键字时,关键字在排序前后相对位置关系不变

插入排序

直接插入排序:从第二个关键字开始,依次与其前面的所有关键字比较 希尔排序:排序表中含有n个记录,取当前表长的1/2为增量d,将其分为d个子表,子表关键字数为d+1。对子表进行直接插入排序。一趟排序结束后缩小增量,重复上述操作,直到增量为1。

交换排序

冒泡排序:两相邻的关键字相比较。n个记录,第0个记录与第1个记录比较,比较完后的第1个记录再与第2个记录比较,直到所有记录比较完,一趟比较结束,此后每趟比较的最后一位记录不再参与下次比较。开始下一趟比较,直到结束。 快速排序:一趟排序将记录分为两部分,在对两部分分别进行快速排序。 一趟快速排序,i,j为排序记录的起始下标和终止下标,第i+1个记录为temp,从下标j开始,由后向前,找到一个比temp小的记录,将记录放到下标i位置,i++。接着由下标i开始,由前向后,找到一个比temp大的记录,将记录放到下标j位置,j–。重复搜索步骤,直到i==j。第i+1个记录为temp。

选择排序

** 直接选择排序:每趟都是找出最小的记录与开始记录交换位置,每趟结束的开始位置的记录不再参与下一趟。

排序算法性能比较(稳定性与时间空间复杂度)

排序算法 平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 稳定性
直接插入排序 O(n^2) O(n) O(n^2) O(1) 稳定
:——: :——-: :——-: :——-: :——-: :——-:
希尔排序 / / / O(1) 不稳定
:——: :——-: :——-: :——-: :——-: :——-:
冒泡排序 O(n^2) O(n^2) O(n^2) O(1) 稳定
:——: :——-: :——-: :——-: :——-: :——-:
快速排序 O(nlogn) O(nlogn) O(n^2) O(logn) 不稳定
:——: :——-: :——-: :——-: :——-: :——-:
直接选择排序 O(n^2) O(n^2) O(n^2) O(1) 不稳定
:——: :——-: :——-: :——-: :——-: :——-:
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定
:——: :——-: :——-: :——-: :——-: :——-:
归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定
:——: :——-: :——-: :——-: :——-: :——-: