java快速排序
概述
快速排序演算法借鑑的是二叉樹前序遍歷的思想,最終對陣列進行排序。
優點:
對於資料量比較大的陣列排序,由於採用的具有二叉樹二分的思想,故排序速度比較快
侷限
只適用於順序儲存結構的資料排序(陣列 ,ArrayList等),不適用於鏈式的資料結構
演算法實現思路
一.將目標陣列轉化為這樣一個數組。陣列中的某個位置左邊的所有資料都比該位置的資料小,該位置右邊的資料都比該位置資料大。
實現思路:
1.取出陣列第0個數據

圖片發自簡書App
2.從陣列最右邊開始遍歷,如果遍歷位置的資料比第0個位置的資料小,將該位置的資料賦值給左邊指標停留下的位置。

圖片發自簡書App
3.改變遍歷方向,從左邊開始開始遍歷,如果發現左邊的資料比第0個位置的資料大,將該位置的資料賦值給2步驟停留下來的位置,並變換方向。

圖片發自簡書App
4.迴圈2、3步驟直到左右遍歷到的下標重合
5.將取出的第0個位置的值賦值給迴圈結束後左右指標停留下的位置
二.借鑑前序遍歷的思路,遞迴,最終完成排序。
程式碼實現
private void quickSort(int[] array, int start, int end) { if (start >= end) { return; } int key = array[start]; int left = start; int right = end; boolean direction = true; L1: while (left < right) { if (direction) { for (int i = right; i > left; i--) { if (array[i] < key) { array[left++] = array[i]; right = i; direction = !direction; continue L1; } } right = left; } else { for (int i = left; i < right; i++) { if (array[i] > key) { array[right--] = array[i]; left = i; direction = !direction; continue L1; } } left = right; } } array[left] = key; quickSort(array, start, left - 1); quickSort(array, left + 1, end); }
結果測試
@Test public void testQuickSort() { int[] array = new int[]{1, 3, 4, 10, 2, 5, 6, 9, 7, 8}; quickSort(array, 0, array.length - 1); for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } }