排序算法是数据结构与算法中的一个重要部分,用于对一组数据按照特定顺序进行排列。常见的排序算法有很多,每种算法都有其独特的时间复杂度、空间复杂度和稳定性等特性。以下是一些常用的排序算法及其特点:
-
冒泡排序(Bubble Sort):
- 时间复杂度:平均情况下为 O(n2)O(n2),最坏情况下也是 O(n2)O(n2)。
- 空间复杂度: O(1)O(1)。
- 稳定性:稳定。
- 基本思想:通过重复遍历数组,比较相邻元素并交换它们的位置来实现排序。
-
选择排序(Selection Sort):
- 时间复杂度:平均情况下为 O(n2)O(n2),最坏情况下也是 O(n2)O(n2)。
- 空间复杂度: O(1)O(1)。
- 稳定性:不稳定。
- 基本思想:在未排序的部分中找到最小或最大的元素,将其放到已排序的部分的末尾。
-
插入排序(Insertion Sort):
- 时间复杂度:平均情况下为 O(n2)O(n2),最坏情况下也是 O(n2)O(n2)。
- 空间复杂度: O(1)O(1)。
- 稳定性:稳定。
- 基本思想:从第二个元素开始,将每个元素插入到前面有序部分的适当位置。
-
希尔排序(Shell Sort):
- 时间复杂度:平均情况下为 O(nlogn)O(nlogn),最坏情况下为 O(n2)O(n2)。
- 空间复杂度: O(1)O(1)。
- 稳定性:不稳定。
- 基本思想:通过分组处理,先对间隔较大的序列进行插入排序,再逐渐减小间隔,最终变为相邻元素的插入排序。
-
归并排序(Merge Sort):
- 时间复杂度:平均情况和最坏情况均为 O(nlogn)O(nlogn)。
- 空间复杂度: O(n)O(n)。
- 稳定性:稳定。
- 基本思想:采用分治策略,将数组分成两半递归地排序,然后合并两个已排序的部分。
-
快速排序(Quick Sort):
- 时间复杂度:平均情况为 O(nlogn)O(nlogn),最坏情况下为 O(n2)O(n2)。
- 空间复杂度: O(logn)O(logn)。
- 稳定性:不稳定。
- 基本思想:选择一个基准值,将数组分为左右两部分,左边部分小于基准值,右边部分大于基准值,然后递归地对左右两部分进行快速排序。
-
堆排序(Heap Sort):
- 时间复杂度:平均情况和最坏情况均为 O(nlogn)O(nlogn)。
- 空间复杂度: O(1)O(1)。
- 稳定性:不稳定。
- 基本思想:利用堆这种数据结构进行排序,首先将待排序的数组构建成一个大顶堆,然后将堆顶元素与最后一个元素交换位置,并调整剩余元素的堆,直到全部排好序。
-
计数排序(Counting Sort):
- 时间复杂度: O(n+k)O(n+k),其中 kk 是最大值减去最小值加一。
- 空间复杂度: O(k)O(k)。
- 稳定性:稳定。
- 基本思想:通过计数每个数值出现的次数来确定其最终位置。
-
桶排序(Bucket Sort):
- 时间复杂度:平均情况为 O(n+k)O(n+k),其中 kk 是桶的数量。
- 空间复杂度: O(k)O(k)。
- 稳定性:稳定。
- 基本思想:将待排序的数值分布到有限数量的桶中,然后分别对每个桶中的数值进行排序,最后合并各个桶中的数值。
- 时间复杂度:平均情况和最坏情况均为 O(nlogk)O(nlogk),其中 kk 是基数的最大位数。
- 空间复杂度: O(n+k)O(n+k)。
- 稳定性:稳定。
- 基本思想:基于数字的每一位进行排序,从最低位到最高位依次进行处理。
这些排序算法各有优缺点,在实际应用中应根据具体需求选择合适的算法。
标签:总结,Sort,复杂度,稳定性,算法,n2,排序 From: https://blog.csdn.net/qq_64903447/article/details/140826596