快排 java
阿新 • • 發佈:2018-12-12
快速排序定義:
我們拿一個數組舉例 比如int[] arr={2,3,3,5,6,0};
選中首元素2為基準元素,比它小或者和它相等的就放到它的右邊,比它大的就放到它的左邊。
如何實現它呢:
先把基準元素位置讓出來,然後從右到左找到比基準元素小的,並放在基準元素的位置,接著從左到右找比基準元素大的並放在剛才找到的那個元素的位置。
順序變成這樣:0,2,3,5,6,3
其實就把陣列分成了兩部分。
接著我們在分別對兩部分進行遞迴操作,重複剛才的步驟。
程式碼如下:
public static int fastSort(int[] arr, int start, int end) { if (arr.length <= 0 || start < 0 || start >= arr.length || end < 0 || end >= arr.length) throw new IllegalArgumentException("start:"+start+" end"+end); int x = arr[start]; while (start < end) { while (start<end && arr[end]>x) { end--; } if (arr[end]<x || (start!=end &&arr[end]==x) ){ arr[start]=arr[end]; start++; } while (start<end && arr[start]<x){ start++; } if (arr[start]>x){ arr[end]=arr[start]; end--; } } arr[start]=x; return start; } //遞迴 public static int quickSortAll(int[] arr,int start,int end) { if (end<=0 ||start>=end ||start<0) { return start; }else { int index=fastSort(arr,start,end); quickSortAll(arr,start,index-1); quickSortAll(arr,index+1,end); return index; } }