publicstaticvoidquickSort(int[] arr, int left, int right){ if (left < right) { int basePos = partition(arr, left, right); quickSort(arr, left, basePos - 1); quickSort(arr, basePos + 1, right); } }
privatestaticintpartition(int[] arr, int left, int right){ int i = left, j = right; int base = arr[left]; while (i < j) { while (i < j && arr[j] >= base) {// j--; } if (i < j) { arr[i] = arr[j]; i++; } while (i < j && arr[i] < base) { i++; } if (i < j) { arr[j] = arr[i]; j--; } } arr[i] = base; return i; }
三、选择排序
思路:依靠两层循环找出每一个位置上的数字
时间复杂度:
图示:
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
publicstaticvoidselectSort(int[] arr){ for (int i = 0; i < arr.length - 1; i++) { int min = i; for (int j = i + 1; j < arr.length; j++) { if (arr[j] < arr[min]) { min = j; } } if (min != i) { int temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } } }
四、插入排序
思路:依次从数组的第二位开始取出一个数字,再依次与左边有序部分进行比较,将取出的数字插入对应的位置
时间复杂度:
图示:
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
publicstaticvoidinertSort(int[] arr){ for (int i = 1; i < arr.length; i++) { int j = i; int temp = arr[i]; while (j > 0 && arr[j - 1] > temp) { arr[j] = arr[j - 1]; j--; } if ( j != i) { arr[j] = temp; } } }