快速排序—最經常使用的排序算法

快速排序算法是冒泡排序的一種改進,快速排序也是經過逐漸消除待排序的無序序列中逆序元素來實現排序的算法

算法思想:ide

(1)  咱們從待排序的記錄序列中選取一個記錄(一般第一個)做爲基準元素(稱爲key)key=arr[left],而後設置兩個變量,left指向數列的最左部,right指向數據的最右部。ui

無標題.png

(2)  key首先與arr[right]進行比較,若是arr[right]<key,則arr[left]=arr[right]將這個比key小的數放到左邊去,若是arr[right]>key則咱們只須要將right--,right--以後,再拿arr[right]與key進行比較,直到arr[right]<key交換元素爲止。spa

無標題.png

 

(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的比較。排序

無標題.png

(4)  而後再移動right重複上述步驟it

無標題.png

(5)  最後獲得 {23 58 13 10 57 62} 65 {106 78 95 85},再對左子數列與右子數列進行一樣的操做。最終獲得一個有序的數列。io

{23 58 13 10 57 62} 65 {106 78   95 85}table

{10 13} 23 {58 57 62} 65 {85 78 95} 106class

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(arr,pivot+1,right);

      }

   }

 

   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]

相關文章
相關標籤/搜索