给定数组
56, 7, 23, 56, 78, 23, 785, 432, 567, 213,分别用下面几种排序手段,从小到大排列
1、插入排序
for (int j = 1; j < arr.length; j++) {
int key = arr[j];
int i = j - 1;
while (i >= 0 && arr[i] > key) {
arr[i + 1] = arr[i];
i = i - 1;
}
arr[i + 1] = key;
}
时间复杂度:O的n次方
空间复杂度:O(1)
2、归并排序
3、冒泡排序
4、堆排序
5、快速排序
void sort(int[] arr, int p, int r) {
if (p < r) {
int q = partition(arr, p, r);
sort(arr, p, q - 1);
sort(arr, q + 1, r);
}
}
int partition(int[] arr, int p, int r) {
int x = arr[r];
int i = p - 1;
for (int j = p; j < r; j++) {
if (arr[j] <= x) {
i = i + 1;
exchange(arr, i, j);
}
}
exchange(arr, i + 1, r);
return i + 1;
}
private void exchange(int[] arr, int i, int j) {
int key = arr[i];
arr[i] = arr[j];
arr[j] = key;
}
6、线性时间排序