排序算法

辽宁师范大学 • 张大为@https://daweizh.github.io/noip/

除主函数外,本例中每个函数一个对应名字的.h文件,在主函数使用前用#include ""引入。当然,也可以把函数体直接在main前声明而不采取#incldue的方法。

1. 冒泡排序 (Bubble Sort)

改进的冒泡排序:

2. 选择排序 (Selection Sort)

3. 插入排序 (Insertion Sort)

4. 希尔排序 (Shell Sort)

shell排序实际上是一种直接插入排序推广,其基本原理为其先将一组数分成若干组;此处应该注意,分组的方式不能几个几个紧挨着分组,而是采用每次所分组数均为素数且最后一次分组为1的方法。采用分组的好处是,在每次排序完后都是将小的数尽量往前面赶,大的数尽量往后面赶,最后一次排序直接采用直接插入排序。运用到了直接插入排序越有序有快的特性。

例如12、5、9、34、6、8、33、56、89、0、7、4、22、55、77的排序步骤如下:

5. 快速排序 (Quick Sort)

6. 并归排序 (Merge Sort)

7. 堆排序 (Heap Sort)

8. 计数排序 (Counting Sort)

9. 桶排序 (Bucket Sort)

10. 基数排序 (Radix Sort)

11. 特别的冒泡排序——鸡尾酒排序 (Cocktail Sort)

12. 排序算法比较

  1. O(n²)的排序算法
    • 冒泡排序
    • 选择排序
    • 插入排序
    • 希尔排序
  2. O(n log n) 的排序算法
    • 并归排序
    • 快速排序
    • 堆排序
  3. 线性的排序算法
    • 计数排序
    • 桶排序
    • 基数排序

辽师张大为@https://daweizh.github.io/csp/