最好、平均时间复杂度:O(nlogn)
最坏时间复杂度:O(n2)
由于递归调用的缘故,空间复杂度:O(logn)
@Overrideprotected void sort() {sort(0, array.length);}/*** 对 [begin, end) 范围内的元素进行快速排序*/private void sort(int begin, int end) {if (end - begin < 2) {return;}//确定轴点位置int mid = pivotIndex(begin, end);//对子序列继续快排sort(begin, mid);sort(mid + 1, end);}/*** 确定 [begin, end) 范围的轴点索引index* @return 返回轴点的索引*/private int pivotIndex(int begin, int end) {// 备份begin的元素--选取轴点T pivot = array[begin];end--;while (begin < end) {while (begin <end) {if (cmp(pivot, array[end]) < 0) {end--;} else {//则end位置的元素小于或等于轴点array[begin] = array[end];begin++;break;}}while (begin <end) {if (cmp(pivot, array[begin]) > 0) {begin++;}else {array[end] = array[begin];end--;break;}}}//来到这儿说明begin==end// 将轴点元素放入最终位置,返回轴点元素索引array[begin] = pivot;return begin;}
