Java选择排序,插入排序,快速排序
public class Test { public static void main(String[] args) { int a[] = { 1, 2, 3, 4, 5 }; 选择排序(a); // 插入排序(a); System.out.print("排序后:"); for (int n : a) { System.out.print(n + " "); } } static void 选择排序(int[] a) { for (int i = 0; i < a.length - 1; i++) { // 定位到i之后的最值 for (int j = i + 1; j < a.length; j++) { if (a[i] < a[j]) { int t = a[i]; a[i] = a[j]; a[j] = 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(); } } }
快速排序
package ah.sort; public class QuickSortMy { static void printArray(int a[]) { for (int i : a) { System.out.print(i + "\t"); } System.out.println(); } static void qsort(int a[], int left, int right) { if (left >= right) { return; } printArray(a); int key = a[left]; int i = left, j = right; while (i < j) { while (i < j && a[j] > key) { j--; } if (i < j) { System.out.printf("a[%d]=%d <- a[%d]=%d\n", i, a[i], j, a[j]); a[i++] = a[j]; } while (i < j && a[i] < key) { i++; } if (i < j) { System.out.printf("a[%d]=%d -> a[%d]=%d\n", i, a[i], j, a[j]); a[j--] = a[i]; } } a[i] = key; printArray(a); qsort(a, left, i - 1); qsort(a, i + 1, right); } public static void main(String[] args) { int a[] = { 3, 4, 5, 1, 2 }; qsort(a, 0, a.length - 1); } }