java之快速排序
阿新 • • 發佈:2020-07-30
/*快速排序 演算法思路: 1、在待排序的N個記錄中任取一個元素(通常取第一個記錄)作為基準,稱為基準記錄; 2、定義兩個索引 left 和 right 分別表示“首索引” 和 “尾索引”,key 表示“基準值”; 3、首先,尾索引向前掃描,直到找到比基準值小的記錄(left != righ),並替換首索引對應的值; 4、然後,首索引向後掃描,直到找到比基準值大於的記錄(left != righ),並替換尾索引對應的值; 5、若在掃描過程中首索引等於尾索引(left = right),則一趟排序結束;將基準值(key)替換首索引所對應的值; 6、再進行下一趟排序時,待排序列被分成兩個區:[0,left-1],[righ+1,end] 7、對每一個分割槽重複步驟2~6,直到所有分割槽中的記錄都有序,排序成功。*/ public class ArraysTest2 { public static void main(String[] args) { int[] arr = new int[]{-1,3,-2,5,8}; System.out.print("快速排序前結果為:"+"\n"); for (int i : arr ) { System.out.print(i + "\t"); } quickSort(arr, 0, arr.length - 1); System.out.print("\n"+"快速排序後結果為:"+"\n"); for (int i : arr ) { System.out.print(i + "\t"); } } private static void quickSort(int[] arr, int leftIndex, int rightIndex){ //當左邊索引大於等於右邊索引,表示第一遍迴圈完畢 if(leftIndex >= rightIndex){ return; } intleft = leftIndex; int right = rightIndex; //待排序的第一個元素為基準 int key = arr[left]; //前後兩邊交替掃描,直到出現left = right才結束迴圈 while (left < right){ while (left < right && arr[right] >= key){ //從右往左掃描,找到第一個比基準值小的元素 right--; } //找到比基準小的值後,將值(arr[right])與arr[left]替換 arr[left] = arr[right]; while (left < right && arr[left] <= key){ //從左往右掃描,找到第一個比基準值大的元素 left++; } //找到比基準大的值後,將值(arr[left])與arr[right]替換 arr[right] = arr[left]; } //基準值歸位 arr[left] = key; //遞迴呼叫快速排序方法 quickSort(arr, leftIndex, left-1); quickSort(arr, right+1, rightIndex); } }