ten da classical sort
程序员文章站
2023-12-27 10:29:03
...
ten da classical sort
- k指“桶”的个数;
- In-place指占用常数内存,不占用额外内存;
- Out-place指占用额外内存)
- 快排、归并、堆排、冒泡属比较
- 在排序的最终结果里,元素之间的次序依赖于它们之间的比较。
- 每个数都必须和其他数进行比较,才能确定自己的位置。
- 在冒泡之类的排序中,需要比较n次,所以平均时间复杂度为O(n²)。
- 在归并、快排之类,
- 问题规模通过分治法消减为logN次,
- 所以时间复杂度平均O(nlogn)。
- 比较排序适用于一切需要排序
- 计数、基数、桶排属非比较排序
- 非比较排序通过确定每个元素之前,应有多少个元素
- 数组arr,计算arr[i]之前有多少个元素,则唯一确定了arr[i]在排序后数组中的位置。
- 非比较排序只要确定每个元素之前的已有的元素个数即可,一次遍历即可解决。
- 时间复杂度O(n)。
- 但非比较排序需要占用空间来确定唯一位置。
- 对数据规模和数据分布有一定的要求。
(Bubble Sort)
-
越小的元素会经由交换慢慢“浮”到数列的顶端。
-
比较相邻的元素。如果第一个比第二个大,就交换它们;
-
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
-
针对所有的元素重复以上的步骤,除了最后一个;
-
重复1~3,直到排序完成。
public static int[] bubbleSort(int[] array) {
if (array.length == 0)
return array;
for (int i = 0; i < array.length; i++)
for (int j = 0; j < array.length - 1 - i; j++)
if (array[j + 1] < array[j]) {
int temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
}
return array;
}
- 最佳情况:T(n) = O(n)
- 最差情况:T(n) = O(n2)
- 平均情况:T(n) = O(n2)