快速排序算法借鑑的是二叉樹前序遍歷的思想,最終對數組進行排序。算法
對於數據量比較大的數組排序,因爲採用的具備二叉樹二分的思想,故排序速度比較快數組
只適用於順序存儲結構的數據排序(數組 ,ArrayList等),不適用於鏈式的數據結構數據結構
3.改變遍歷方向,從左邊開始開始遍歷,若是發現左邊的數據比第0個位置的數據大,將該位置的數據賦值給2步驟停留下來的位置,並變換方向。測試
4.循環二、3步驟直到左右遍歷到的下標重合
5.將取出的第0個位置的值賦值給循環結束後左右指針停留下的位置ui
1 private void quickSort(int[] array, int start, int end) { 2 if (start >= end) { 3 return; 4 } 5 int key = array[start]; 6 int left = start; 7 int right = end; 8 boolean direction = true; 9 L1: 10 while (left < right) { 11 if (direction) { 12 for (int i = right; i > left; i--) { 13 if (array[i] < key) { 14 array[left++] = array[i]; 15 right = i; 16 direction = !direction; 17 continue L1; 18 } 19 } 20 right = left; 21 } else { 22 for (int i = left; i < right; i++) { 23 if (array[i] > key) { 24 array[right--] = array[i]; 25 left = i; 26 direction = !direction; 27 continue L1; 28 } 29 } 30 left = right; 31 } 32 } 33 array[left] = key; 34 quickSort(array, start, left - 1); 35 quickSort(array, left + 1, end); 36 37 }
1 @Test 2 public void testQuickSort() { 3 int[] array = new int[]{1, 3, 4, 10, 2, 5, 6, 9, 7, 8}; 4 quickSort(array, 0, array.length - 1); 5 for (int i = 0; i < array.length; i++) { 6 System.out.println(array[i]); 7 } 8 }
1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 10 10