排序的几种算法
排序的几种算法
前言
排序算法是将一组数据按照一定的顺序排列的算法。这里列举几种常见的排序算法:
冒泡排序(Bubble Sort)
- 通过依次比较相邻的两个元素,如果它们的顺序不正确就交换它们,一轮比较下来最大(或最小)的元素就像气泡一样”浮”到了最上面(或最下面),因此称为冒泡排序。
- 时间复杂度:平均情况和最坏情况均为 O(n^2)。
1 | def BUBsort(buf): |
可以发现需要进行两次遍历,时间复杂度就为O(n^2)
选择排序(Selection Sort)
- 在未排序序列中选择最小(或最大)的元素,将其放置到已排序序列的末尾,直到所有元素均排序完毕。
- 时间复杂度:平均情况和最坏情况均为 O(n^2)。
1 | def SELsort(buf): |
可以发现需要进行两次遍历,时间复杂度就为O(n^2)
插入排序(Insertion Sort)
- 将未排序序列的第一个元素插入到已排序序列中的正确位置,然后将下一个未排序元素插入到已排序序列中,依次类推,直到所有元素均排序完毕。
- 时间复杂度:平均情况和最坏情况均为 O(n^2)。
1 | def INSsort(buf): |
快速排序(Quick Sort)
- 选择一个基准元素,将数组分为两个子数组,小于基准元素的放在左边,大于基准元素的放在右边,然后对子数组进行递归排序。
- 时间复杂度:平均情况下为 O(nlogn),最坏情况下为 O(n^2)。
归并排序(Merge Sort)
- 将数组分成两个子数组,分别对两个子数组进行递归排序,然后将排好序的子数组合并成一个新的有序数组。
- 时间复杂度:平均情况和最坏情况均为 O(nlogn)。
堆排序(Heap Sort)
- 将数组构建成一个最大堆(或最小堆),然后将堆顶元素与最后一个元素交换并移除,然后重新调整堆,重复这个过程直到所有元素都排好序。
- 时间复杂度:平均情况和最坏情况均为 O(nlogn)。
总结
这些是排序算法中的一些经典方法,每种排序算法都有自己的优劣和适用场景。在实际应用中,选择合适的排序算法往往需要考虑到数据规模、数据特点、时间复杂度等因素。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Daily Study!