个人理解,仅供参考 ─=≡Σ(((つ??ω??)つ
排序就是将无序的记录变为有序的记录。
判断排序方法是否的稳定:当记录中存在相同的关键字时,关键字在排序前后相对位置关系不变
插入排序
直接插入排序:从第二个关键字开始,依次与其前面的所有关键字比较 希尔排序:排序表中含有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) | 稳定 |
:——: | :——-: | :——-: | :——-: | :——-: | :——-: |