資料結構與演算法-快速排序
阿新 • • 發佈:2021-01-31
快速排序是對氣泡排序的一種改進
首先是要對陣列進行分割槽,在基準數的左右兩邊分組。左邊的陣列<基準數,右邊的陣列>基準數。
可以把基準數比作是中軸線,區分開兩個分割槽。
注意:分割槽僅僅是將大於和小於基準數的元素分成兩組,並沒有進行排序。
public static int subZone(int[] arr,int right,int left){
int pivot=arr[left];
while(right>left){
//如果左右分割槽為未區完畢
while (arr[right]>pivot&&right>left){
right--;
}
if(right>left){
arr[left]=arr[right];
left++;
}
while (arr[left]<pivot&&right>left){
left++;
}
if (right>left){
arr[right]=arr[left];
right--;
}
}
//返回基準數,後面使用遞迴時,分組要作為獨立的新的區繼續進行分割槽.
arr[right]=pivot;
return right;
}
使用遞歸併且呼叫分割槽方法獲取基準數。利用基準數傳入開始和結束的下標。
private static void quickSort(int[] arr,int right,int left) {
//結束條件
if(left<right){
int index=subZone(arr,right,left);
quickSort(arr,index-1,left);
quickSort(arr,right,index+1);
}
}
public class QuickSortDemo {
public static void main(String[] args) {
int[] arr={1,0,9,8,11,3,-1};
System.out.println("排序前:");
System.out.println(Arrays.toString(arr));
quickSort(arr,arr.length-1,0);
System.out.println("排序後:");
System.out.println(Arrays.toString(arr));
}