经典排序算法整理
经典排序算法
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
- 堆排序
- 归并排序
- 希尔排序
- 计数排序
- 桶排序
- 基数排序
冒泡排序
排序算法 | 平均时间复杂度 | 最差时间复杂度 | 空间复杂度 | 数据对象稳定性 |
---|---|---|---|---|
冒泡排序 | $O(n^2)$ | $O(n^2)$ | $O(1)$ | 稳定 |
冒泡排序的思想如下:
- 从首位开始,比较相邻两元素的大小,若第一个元素比第二个大,则交换他们。(每次将最大的移到末尾)
- 重复以上步骤,直到没有任何一对数字需要比较。
效果如下:
示例代码:
1 | void bubbleSort(int arr[], int n){ // 待排序数组,数组长度 |
选择排序
排序算法 | 平均时间复杂度 | 最差时间复杂度 | 空间复杂度 | 数据对象稳定性 |
---|---|---|---|---|
选择排序 | $O(n^2)$ | $O(n^2)$ | $O(1)$ | 数组不稳定、链表稳定 |
选择排序思想如下:
- 首先从未排序序列中找到最小或最大元素,放到排序序列的起始位置。
- 从剩余未排序元素中继续寻找最小或做大元素,然后放到已排序序列的末尾
- 重复以上过程,直到完成排序
效果如下:
示例代码:
1 | void selectionSort(int arr[], int n){ // 待排序数组,数组长度 |
插入排序
排序算法 | 平均时间复杂度 | 最差时间复杂度 | 空间复杂度 | 数据对象稳定性 |
---|---|---|---|---|
插入排序 | $O(n^2)$ | $O(n^2)$ | $O(1)$ | 稳定 |
插入排序算法思想:
- 1.从第一个元素开始,该元素可以认为已经被排序
- 2.取出下一个元素,在已经排序的元素序列中从后向前扫描
- 3.如果该元素(已排序)大于新元素,将该元素移到下一位置
- 4.重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置
- 5.将新元素插入到该位置后
- 6.重复步骤 2~5
效果如下:
示例代码:
1 | void insertSort(int arr[], int n) { |
本文作者 : HeoLis
原文链接 : https://ishero.net/%E7%BB%8F%E5%85%B8%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E6%95%B4%E7%90%86.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
学习、记录、分享、获得