好程式設計師Java教程教你5分鐘瞭解快速排序

好程式設計師IT發表於2019-06-21

好程式設計師 Java 教程教你 5 分鐘瞭解快速排序, 前言:

快速排序是面試中經常會問到的一種排序演算法,對比其他一些排序演算法,快速排序的平均時間相對較少。

快速排序思想介紹

快速排序使用了分治的思想,透過一輪的排序,可以將序列分割成獨立的兩個部分,其中一部分的值均比基準值小,另一部分的值均比基準值大。而後針對兩部分序列再分別按照同樣的演算法進行排序,直到序列整體有序。

 

以如下序列 arr 為例進行升序排序,說明快速排序的基本演算法


第一個位置的值 23 作為基準值 base ,從右邊開始比較,如果 arr[high]>base,high 前移。


arr[high]<base,arr[low]=arr[high] ,然後 low 後移


Arr[low]<base, 不交換, low 後移

Arr[low]>base,arr[high]=arr[low] high 前移


Arr[high]<base,arr[low]=base low 後移,


low high 指向同一個位置,

將基準資料賦值給 low high 指向的同一位置,本輪比較結束。然後,再對 23 前的資料和 23 後面的資料,分別再按照上述演算法進行比較排序,依次類推,直到所有元素有序。


快速排序的程式碼實現

由於對各個子序列都要進行相同演算法的排序,可以採用遞迴思想實現快速排序

  1. package  com.qfedu.vo;  
  2. public   class  QuickSort {  
  3. public   static   void  quickSort( int [] arr, int  low, int  high){  
  4. int  i,j,temp,t;  
  5. if (low>high){  
  6. return ;  
  7. }  
  8. i=low;  
  9. j=high;  
  10. //temp儲存基準數  
  11. temp = arr[low];  
  12. while  (i<j) {  
  13. //先從右邊開發判斷,條件成立,high向左遞減  
  14. while  (temp<=arr[j]&&i<j) {  
  15. j--;  
  16. }  
  17. arr[i]=arr[j];  
  18. //再從左邊開始,low依次向右遞增  
  19. while  (temp>=arr[i]&&i<j) {  
  20. i++;  
  21. }  
  22. arr[j]=arr[i];  
  23. arr[i]=temp;  
  24. }  
  25. //遞迴呼叫左邊內容進行排序  
  26. quickSort(arr, low, j-1);  
  27. //遞迴呼叫右邊內容進行排序  
  28. quickSort(arr, j+1, high);  
  29. }  
  30. public   static   void  main(String[] args){  
  31. int [] arr = {15,23,7,87,34,56};  
  32. quickSort(arr, 0, arr.length-1);  
  33. for  ( int  i = 0; i < arr.length; i++) {  
  34. System.out.println(arr[i]);  
  35. }  
  36. }  
  37. }  

  總結

以上介紹的是普通快速排序,針對快速排序,還有一些改進演算法,可以進一步提高執行效率。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2648334/,如需轉載,請註明出處,否則將追究法律責任。

相關文章