Java快速排序演算法

來源:互聯網
上載者:User

標籤:ima   改變   基本   src   pre   遞迴   sum   i+1   輸出   

快速排序演算法思想:快速排序(Quicksort)是對冒泡排序的一種改進。快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。用一個演算法排序圖形象表示了快速排序一趟快速排序的演算法是:1)設定兩個變數i、j,排序開始的時候:i=0,j=N-1;2)以第一個數組元素作為關鍵資料,賦值給key,即key=A[0];3)從j開始向前搜尋,即由後開始向前搜尋(j--),找到第一個小於key的值A[j],將A[j]和A[i]互換;4)從i開始向後搜尋,即由前開始向後搜尋(i++),找到第一個大於key的A[i],將A[i]和A[j]互換;5)重複第3、4步,直到i=j; (3,4步中,沒找到合格值,即3中A[j]不小於key,4中A[i]不大於key的時候改變j、i的值,使得j=j-1,i=i+1,直至找到為止。找到合格值,進行交換的時候i, j指標位置不變。另外,i==j這一過程一定正好是i+或j-完成的時候,此時令迴圈結束)最通俗的講法:

取第一個數跟數組中的其他數比較,小的在左邊大的在右邊,就這樣一直遞迴排序

排序的基本過程以數組{49,38,65,97,76,13,27,49}為例,選擇第一個元素49為基準 
初始化關鍵字: [49,38,65,97,76,13,27,49]     代碼實現:
 1 public static void main(String[] args) { 2         // TODO Auto-generated method stub 3          int a[] = {49, 38, 65, 97, 76, 13, 27, 49};//設定一個數組 4          sort(a,0,a.length-1);                                               //調用快速排序方法 5          System.out.println(Arrays.toString(a));                //將快速排序過的數組輸出 6     } 7      public static void sort(int a[], int left, int right) { 8             int i, j, key; 9             if (left > right) {   //這個判斷很重要的,有這個才會在函數遞迴的時候跳出10                 return;11             }12             i = left;                //左邊第一位開始13             j = right;            //右邊最後一位14             key = a[i];     //用數組的第一位元做為參考數15             while (i < j) {   // 從數組的兩端交替向中間掃描16                 while (i < j && a[j] >= key){    //從右邊開始掃描17                     j--;18                     }19                 //跳出迴圈說明右邊這個點的數有比參考數小,所以兩個數互換位子,小的到左邊20                     a[i] = a[j];21                 while (i<j && a[i]< key){   //再從左邊掃描22                     i++;23                     }24                 //跟上面同理,只是相反25                     a[j] = a[i];26              }27             a[i] = key;        //這是迴圈到最後的時候 a[j] = a[i];產生重複,i的位置的數應該是key,所以替換回來28             sort(a, left, i - 1);         // 對小於key一邊的遞迴排序29             sort(a, i + 1, right);      // 對高於key一邊的遞迴排序30             //直到兩邊排序完畢,在以上中的if判斷中跳出這個方法成功快速排序31         }

 

Java快速排序演算法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.