1. 程式人生 > >快速排序算法 java實現

快速排序算法 java實現

基準 ++ code 大於 java oid 序號 while 算法


1
public class QuickRank { 2 public static void main(String[] args) { 3 int[] original={26,58,1,24,75,69,32,45,841,25898}; 4 QuickRank quickRank=new QuickRank(); 5 quickRank.rankSimple(original,0,original.length-1); 6 for(int i:original) 7 System.out.println(i); 8 } 9
//清晰明了 10 public void rankSimple(int[] original,int start,int end){ 11 if(end<=start) return;//遞歸結束條件 12 int standard=original[start]; 13 int leftOrder=start; 14 int rightOrder=end; 15 while(leftOrder<rightOrder){ 16 //從右往左跑 17 while(leftOrder<rightOrder && original[rightOrder]>standard)
18 rightOrder--; 19 original[leftOrder]=original[rightOrder]; 20 //從左往右跑 21 while(leftOrder<rightOrder && original[leftOrder]<standard) 22 leftOrder++; 23 original[rightOrder]=original[leftOrder]; 24 }
25 original[leftOrder]=standard; 26 //遞歸開始 27 rankSimple(original, start, leftOrder-1); 28 rankSimple(original, leftOrder+1, end); 29 } 30 }
結果:
1
24
26
32
45
58
69
75
841
25898

快速排序算法的思想:

  1.一次排序(在排序結束之前,數組中始終有一個位置看為“空值”,該位置待插入數據):

    ①隨便取待排序數組的一個值(本例取第一個值)作為本次排序的基準值standard,原數組該值得位置可看成空值,待插入。

    ②從待排序數組右往左,依次比較每個值與standar的大小,如果有比standard小的,則將該值插入數組中的空值區域,此時,該值在數組中的位置看成 空值。

    ③從待排序數組左往右,依次比較每個值與standar的大小,如果有比standard大的,則將該值插入數組中的空值區域,此時,該值在數組中的位置看成空值。

    ④循環②③步驟,直到從右往左和從左往右的序號相等;表明本次排序結束,將standard放入該序號位置。此時,該序號前所有數字都小於standard,序號後所有的數字都大於standard,形成兩個小的數組;

  2.叠代

    通過一次排序步驟後,便得到standard前後兩個數組,然後分別將這兩個數組進行一次排序,並叠代進行;

  3.叠代結束標誌:

    進入一次排序的數組開始位置和結束位置相等,即傳進來的是一個數字,不再需要排序;

快速排序算法 java實現