Java中常见的排序算法包括:
冒泡排序(Bubble Sort)
原理:通过重复遍历要排序的数列,比较相邻元素,若顺序错误则交换。
时间复杂度:平均情况和最坏情况均为 O(n^2)。
稳定性:稳定。
选择排序(Selection Sort)
原理:每次从待排序数据中选出最小(或最大)元素,存放在序列起始位置,直至排序完成。
时间复杂度:平均情况和最坏情况均为 O(n^2)。
稳定性:稳定。
插入排序(Insertion Sort)
原理:构建有序序列,将未排序数据插入到已排序序列中的适当位置。
时间复杂度:平均情况和最坏情况均为 O(n^2)。
稳定性:稳定。
快速排序(Quick Sort)
原理:使用分治法将序列分为较小和较大的两个子序列,递归排序子序列。
时间复杂度:平均情况为 O(n log n),最坏情况为 O(n^2)。
稳定性:不稳定。
希尔排序(Shell Sort)
原理:基于插入排序的一种优化,通过设置递减的增量对序列进行分组插入排序。
时间复杂度:取决于增量序列,通常介于 O(n log n) 到 O(n^2) 之间。
稳定性:不稳定。
归并排序(Merge Sort)
原理:采用分治法,将序列分成两半,分别排序后合并。
时间复杂度:O(n log n)。
稳定性:稳定。
堆排序(Heap Sort)
原理:利用堆这种数据结构所设计的一种排序算法。
时间复杂度:O(n log n)。
稳定性:不稳定。
基数排序(Radix Sort)
原理:针对整数或字符串等具有多位的数据进行排序,从最低有效位开始,按位排序。
时间复杂度:O(nk),其中 k 是最大数的位数。
稳定性:稳定。
以上排序算法中,内部排序指的是只需要用到 O(1) 的额外空间的排序算法,而外部排序则适用于数据量超出内存大小的情况。