快速排序—最常用的排序算法
算法思想:
(1) 我們從待排序的記錄序列中選取一個記錄(通常第一個)作為基準元素(稱為key)key=arr[left],然後設置兩個變量,left指向數列的最左部,right指向數據的最右部。
(2) key首先與arr[right]進行比較,如果arr[right]<key,則arr[left]=arr[right]將這個比key小的數放到左邊去,如果arr[right]>key則我們只需要將right--,right--之後,再拿arr[right]與key進行比較,直到arr[right]<key交換元素為止。
(3) 如果右邊存在arr[right]<key的情況,將arr[left]=arr[right],接下來,將轉向left端,拿arr[left ]與key進行比較,如果arr[left]>key,則將arr[right]=arr[left],如果arr[left]<key,則只需要將left++,然後再進行arr[left]與key的比較。
(4) 然後再移動right重復上述步驟
(5) 最後得到 {23 58 13 10 57 62} 65 {106 78 95 85},再對左子數列與右子數列進行同樣的操作。最終得到一個有序的數列。
{23 58 13 10 57 62} 65 {10 13} 23 {58 57 62} 65 {85 78 95} 106 10 13 23 57 58 62 65 78 85 95 106 |
算法實現:
public class QuickSort {
public static void quickSort(int [] arr,int left,int right) { int pivot=0; if(left<right) { pivot=partition(arr,left,right); quickSort(arr,left,pivot-1); quickSort } }
private static int partition(int[] arr,int left,int right) { int key=arr[left]; while(left<right) { while(left<right && arr[right]>key) { right--; } arr[left]=arr[right]; while(left<right && arr[left]<key) { left++; } arr[right]=arr[left]; } arr[left]=key; return left; }
public static void main(String[] args) { int arr[]= {65,58,95,10,57,62,13,106,78,23,85}; System.out.println("排序前:"+Arrays.toString(arr)); quickSort(arr,0,arr.length-1); System.out.println("排序後:"+Arrays.toString(arr)); } } |
排序前:[65, 58, 95, 10, 57, 62, 13, 106, 78, 23, 85] 排序後:[10, 13, 23, 57, 58, 62, 65, 78, 85, 95, 106] |
快速排序—最常用的排序算法