常见的排序算法有多种,下面简要介绍几种常用的排序算法及其特点。
- 冒泡排序(Bubble Sort)
冒泡排序是一种简单的排序算法,它的基本思想是依次比较相邻的元素,如果前面的元素大于后面的元素,则交换它们的位置,直到序列中所有元素都有序为止。
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定排序
- 插入排序(Insertion Sort)
插入排序是一种简单直观的排序算法,它的基本思想是将待排序序列分为两部分,已排序部分和未排序部分。从未排序部分依次取出一个元素,插入到已排序部分中的合适位置。
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:稳定排序
- 选择排序(Selection Sort)
选择排序是一种简单直观的排序算法,它的基本思想是从待排序序列中选择最小的元素,将其放到序列的起始位置,然后再从剩余的未排序元素中选择最小的元素,放到已排序序列的末尾,以此类推,直到序列中所有元素都有序为止。
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定性:不稳定排序
- 快速排序(Quick Sort)
快速排序是一种高效的排序算法,它的基本思想是通过一趟排序将待排序序列分割成两部分,其中一部分的所有元素都比另一部分的所有元素小,然后再按照同样的方式对这两部分分别进行快速排序,直到序列中所有元素都有序为止。
时间复杂度:O(nlogn)
空间复杂度:O(logn)
稳定性:不稳定排序
- 归并排序(Merge Sort)
归并排序是一种稳定的排序算法,它的基本思想是将待排序序列分为若干个子序列,对每个子序列进行归并排序,最后将所有子序列合并成一个有序序列。
时间复杂度:O(nlogn)
空间复杂度:O(n)
稳定性:稳定排序
- 堆排序(Heap Sort)
堆排序是一种选择排序,它的基本思想是将待排序序列构建成一个大根堆或小根堆,然后依次将堆顶元素取出并重新调整堆,直到序列中所有元素都有序为止。
时间复杂度:O(nlogn)
空间复杂度:O(1)
稳定性:不稳定排序 7. 希尔排序(Shell Sort)
希尔排序是插入排序的一种改进算法,它的基本思想是将待排序序列按照一定步长分组,对每组进行插入排序,然后逐步缩小步长,最终将所有元素插入排序,直到序列中所有元素都有序为止。
时间复杂度:O(nlogn) ~ O(n^2)
空间复杂度:O(1)
稳定性:不稳定排序
- 计数排序(Counting Sort)
计数排序是一种非比较排序,它的基本思想是统计序列中每个元素出现的次数,然后根据统计结果将序列中的元素排列成有序序列。
时间复杂度:O(n+k)
空间复杂度:O(k)
稳定性:稳定排序
- 桶排序(Bucket Sort)
桶排序是一种非比较排序,它的基本思想是将待排序序列分到不同的桶中,每个桶内再分别进行排序,最后将各个桶中的元素依次排列成有序序列。
时间复杂度:O(n+k)
空间复杂度:O(n+k)
稳定性:稳定排序
- 基数排序(Radix Sort)
基数排序是一种非比较排序,它的基本思想是将待排序序列按照位数划分成不同的数字,然后依次按照每个数字进行排序,直到所有位数都排序完成。
时间复杂度:O(d(n+r))
空间复杂度:O(n+r)
稳定性:稳定排序
以上是几种常见的排序算法及其特点,不同的排序算法在不同的场景下具有不同的优势和劣势,根据具体情况选择合适的排序算法能够提高排序效率。