public static void main(String[] args) {
int[] arr = {2312134, 32, 0, 0, -1, 3423, 343, 20, 0x8, -324, 22};
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
/**
* 选择排序实现
* 简单,好理解,但是时间复杂度O(n2)
*/
private static void selectSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = i; j < arr.length; j++) {
if (arr[i] > arr[j]) {
swap(arr, i, j);
}
}
}
}
/**
* 冒泡排序实现
* 和选择排序类似,时间复杂度O(n2)
* 实际测试的过程,冒泡的效率还不如选择排序
*/
private static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = arr.length - 1; j > i; j--) {
if (arr[j] < arr[j - 1]) {
swap(arr, j, j - 1);
}
}
}
}
/**
* 快速排序实现
* 平均时间复杂度O(n*logn)
* 从复杂度上讲,是优秀的排序算法
*/
private static void quickSort(int arr[], int left, int right) {
if (left >= right) {
return;
}
int x = left;
int y = right;
int index = arr[left];
//right
while (x < y) {
while (x < y && arr[y] >= index) {
y--;
}
if (x < y) {
arr[x++] = arr[y];
}
while (x < y && arr[x] <= index) {
x++;
}
if (x < y) {
arr[y--] = arr[x];
}
}
arr[x] = index;
quickSort(arr, x + 1, right);
quickSort(arr, left, x - 1);
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
网友评论