算法基本流程图解: 后续补
算法时间复杂度 : O(n * logn)
算法设计思想:
快速排序采用的是分治思想,即在一个无序的序列中选取一个任意的基准元素pivot,利用pivot将待排序的序列分成两部分,前面部分元素均小于或等于基准元素,后面部分均大于或等于基准元素,然后采用递归的方法分别对前后两部分重复上述操作,直到将无序序列排列成有序序列
算法代码实现:
public void sort() {
int[] arr = AriUtils.randomArr(10);
AriUtils.print(arr);
sort(arr, 0, arr.length - 1);
AriUtils.print(arr);
}
private void sort(int[] arr, int left, int right) {
if (left >= right) return;
int base = findBase(arr, left, right);
sort(arr, left, base - 1);
sort(arr, base + 1, right);
}
private int findBase(int[] arr, int left, int right) {
int s1 = left;
int p = right;
// 18 2 17 4 5
for (int s2 = left; s2 < right; s2++) {
if (arr[s2] < arr[p]) {
// 2 18 17 4 5
// 2 18 17 4 5
// 2 4 17 18 5
AriUtils.swap(arr, s1++, s2);
}
}
// 2 4 5 18 17
AriUtils.swap(arr, s1, p);
return s1;
}