Java选择排序,插入排序,快速排序

时间:2021-10-05 00:36:27
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);
}
}

}