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)。