排序算法是计算机科学中非常基础且重要的算法,它们被用于将一组数据按照特定的顺序排列。以下是一些常见的排序算法:
- 冒泡排序(Bubble Sort)
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 稳定性:稳定
- 简介:通过重复遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行直到没有再需要交换,也就是说该数列已经排序完成。
- 选择排序(Selection Sort)
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 稳定性:不稳定
- 简介:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
- 插入排序(Insertion Sort)
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 稳定性:稳定
- 简介:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序)。
- 快速排序(Quick Sort)
- 时间复杂度:平均O(n log n),最坏O(n^2)
- 空间复杂度:O(log n)
- 稳定性:不稳定
- 简介:通过选取一个“基准”元素,将数组分为两个子数组,一个包含小于基准的元素,另一个包含大于基准的元素。然后递归地对这两个子数组进行快速排序。
- 归并排序(Merge Sort)
- 时间复杂度:O(n log n)
- 空间复杂度:O(n)
- 稳定性:稳定
- 简介:采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
- 堆排序(Heap Sort)
- 时间复杂度:O(n log n)
- 空间复杂度:O(1)
- 稳定性:不稳定
- 简介:利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。
- 希尔排序(Shell Sort)
- 时间复杂度:取决于间隔序列,最坏O(n^2)
- 空间复杂度:O(1)
- 稳定性:不稳定
- 简介:也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。
- 计数排序(Counting Sort)
- 时间复杂度:O(n + k),k是输入范围
- 空间复杂度:O(k)
- 稳定性:稳定
- 简介:当输入的元素是n个0到k之间的整数时,时间复杂度是O(n+k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。
- 基数排序(Radix Sort)
- 时间复杂度:O(nk),k是最大数的位数
- 空间复杂度:O(n + k)
- 稳定性:稳定
- 简介:基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。
- 桶排序(Bucket Sort)
- 时间复杂度:O(n + k),k是桶的数量
- 空间复杂度:O(n * k)
- 稳定性:稳定
- 简介:将数据分到有限数量的桶里,每个桶再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。
每种排序算法都有其适用场景和优缺点。在实际应用中,选择哪种排序算法取决于数据的特点、算法的时间复杂度和空间复杂度要求,以及是否需要稳定排序等因素。