public class Test {
public static void main(String[] args) {
int a[] = { 1, 2, 3, 4, 5 };
// 选择排序(a);
// 插入排序(a);
quicksort(a, 0, a.length - 1);
System.out.print("排序后:");
for (int n : a) {
System.out.print(n + " ");
}
}
static void 选择排序(int[] a) {
int pos = 0;
for (int i = 0; i < a.length - 1; i++) {
pos = i;
// 定位到i之后的最值
for (int j = i; j < a.length; j++) {
if (a[pos] < a[j]) {
pos = j;
}
}
// 最值和i值交换
int t = a[pos];
a[pos] = a[i];
a[i] = t;
}
}
static void 插入排序(int[] arr) {
for (int i = 1; i < arr.length; i++) {
System.out.print(i + ":");
// 假定(0->(j-1))是有序的,看j排在哪里
for (int j = i; j > 0; j--) {
if (arr[j] > arr[j - 1]) {
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
} else {
// 假定前面是有序的,则只需要交换一次即可
break;
}
}
for (int n : arr) {
System.out.print(n + " ");
}
System.out.println();
}
}
static void quicksort(int arr[], int left, int right) {
if (left < right) {
// 定位最左
int key = arr[left];
int i = left;
int j = right;
while (i < j) {
while (i < j && arr[j] < key) {
// 高标左移←
j--;
}
if (arr[i] != arr[j]) {
// 高位:小的往左边拉
arr[i] = arr[j];
}
while (i < j && arr[i] > key) {
// 低标右移→
i++;
}
if (arr[i] != arr[j]) {
// 低位:大的往右边拉
arr[j] = arr[i];
}
}
arr[i] = key;
quicksort(arr, left, i - 1);
quicksort(arr, i + 1, right);
}
}
}