1.描述
挑选出一个数作为“基准”,然后定义左右两个指针,分别从左往右和从右往左遍历,左指针找到比基准数大的数,右指针找到比基准数小的数,然后互换;接着指针顺位移动(注意:右指针应该先移动,为了保证最后基准数的左边都是比它小的),继续比较,直至两个指针相遇,然后将基准数和相遇位置的数互换,此时,基准数的左边都是比它小的数,右边都是比它大的数,然后进行递归,左右两边继续进行,直至排序完成
2.代码
package sort; import java.util.Arrays; public class quickSort { public static void main(String[] args) { int[] arr = new int[]{8,5,4,6,2,3,1,9,11}; quickSort(arr, 0, arr.length-1); System.out.println(Arrays.toString(arr)); } public static void quickSort(int[] arr,int left,int right) { if(left >= right){ return; } int i = left; int j = right; int base = arr[left]; while (i != j) { while (arr[j] >= base && i < j) { j--; } while (arr[i] <= base && i < j) { i++; } int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } arr[left] = arr[i]; arr[i] = base; quickSort(arr,left,i-1); quickSort(arr,i+1,right); } }
3.复杂度
平均时间复杂度:O(nlog₂n)
空间复杂度:O(1)