选择排序
@Testpublic void testSelectSort() {int[] data = {1, 2, 5, 0, 2, 3, 4, 9};for (int i = 0; i < data.length; i++) {for (int j = i + 1; j < data.length; j++) {if (data[j] < data[i]) {int tmp = data[i];data[i] = data[j];data[j] = tmp;}}System.out.println("No." + i + "->" + Arrays.toString(data));}System.out.println("Final:" + Arrays.toString(data));}@Testpublic void testSelectSort2() {int[] data = {1, 2, 5, 0, 2, 3, 4, 9};for (int i = 0; i < data.length; i++) {int min = i;for (int j = i + 1; j < data.length; j++) {if (data[j] < data[min]) {min = j;}}int tmp = data[i];data[i] = data[min];data[min] = tmp;System.out.println("No." + i + "->" + Arrays.toString(data));}System.out.println("Final:" + Arrays.toString(data));}
快速排序
@Testpublic void testQuickSort() {int[] arr = {10, 7, 2, 4, 7, 62, 3, 4, 2, 1, 8, 9, 19};quickSort(arr, 0, arr.length - 1);System.out.println(Arrays.toString(arr));}public static void quickSort(int[] arr, int low, int high) {int i, j, temp, t;if (low > high) {return;}i = low;j = high;//temp就是基准位temp = arr[low];while (i < j) {//先看右边,依次往左递减while (temp <= arr[j] && i < j) {j--;}//再看左边,依次往右递增while (temp >= arr[i] && i < j) {i++;}//如果满足条件则交换if (i < j) {t = arr[j];arr[j] = arr[i];arr[i] = t;}}//最后将基准为与i和j相等位置的数字交换arr[low] = arr[i];arr[i] = temp;//递归调用左半数组quickSort(arr, low, j - 1);//递归调用右半数组quickSort(arr, j + 1, high);}/*** 快排核心算法,递归实现** @param array* @param left* @param right*/public static int sort(int[] array, int left, int right) {// base中存放基准数int base = array[left];int i = left, j = right;while (i < j) {// 顺序很重要,先从右边开始往左找,直到找到比base值小的数while (array[j] >= base && i < j) {j--;}// 再从左往右边找,直到找到比base值大的数while (array[i] <= base && i < j) {i++;}// 上面的循环结束表示找到了位置或者(i>=j)了,交换两个数在数组中的位置if (i < j) {int tmp = array[i];array[i] = array[j];array[j] = tmp;}}// 将基准数放到中间的位置(基准数归位)array[left] = array[i];array[i] = base;return i;// 递归,继续向基准的左右两边执行和上面同样的操作// i的索引处为上面已确定好的基准值的位置,无需再处理//sort(array, left, i - 1);//sort(array, i + 1, right);}
