首頁 >後端開發 >C#.Net教程 >C語言中快速排序法怎麼排

C語言中快速排序法怎麼排

coldplay.xixi
coldplay.xixi原創
2020-08-08 10:13:023590瀏覽

快速排序法的排法:首先每次排序的時候設定一個基準點,將小於等於基準點的數全部放到基準點的左邊;然後將大於等於基準點的數全部放到基準點的右邊;最後在每次交換的時候就不會像冒泡排序一樣每次只能在相鄰的數之間進行交換,交換的距離就大的多了。

C語言中快速排序法怎麼排

快速排序法的排法:

演算法想法:

#(1)  我們從待排序的記錄序列中選取一個記錄(通常第一個)作為基準元素(稱為key)key=arr[left],然後設定兩個變量,left指向數列的最左部,right指向數據的最右部。

C語言中快速排序法怎麼排

(2)  key先與arr[right]比較,如果arr[right]key則我們只需要將right--,right--之後,再拿arr[right]與key比較,直到arr[right]

C語言中快速排序法怎麼排

(3)  如果右邊有arr[right]key,則將arr[right]=arr[left],如果arr[left]

C語言中快速排序法怎麼排

(4)  接著再移動right重複上述步驟

C語言中快速排序法怎麼排

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

C語言中快速排序法怎麼排

演算法實作:

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]

相關學習推薦:C影片教學

以上是C語言中快速排序法怎麼排的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn