public class Test_A30 { public void quickSort(int[] arr,int low,int hight){ if(low<hight){ int pivot=partition(arr,low,hight); quickSort(arr,low,pivot-1); quickSort(arr,pivot+1,hight); } } private int partition(int[] arr,int low,int high){ int pivot=arr[high]; int i=low-1; for(int j=low;j<high;j++){ if(arr[j]<pivot){ i++; int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } int temp=arr[i+1]; arr[i+1]=arr[high]; arr[high]=temp; return i+1; } public static void main(String[] args){ Test_A30 test_30=new Test_A30(); int[] arr={24,6,87,23,1,45}; test_30.quickSort(arr,0,arr.length-1); for(int num:arr){ System.out.println(num+""); } } }
时间复杂度分析: 在最好情况下,每次划分时都能将数组均匀地划分为两个部分,此时时间复杂度为O(nlogn)。 在最坏情况下(每次划分都只将数组中的一个元素放到正确位置),时间复杂度为O(n^2)。 平均时间复杂度为O(nlogn)。