小白眼裏的快速排序
阿新 • • 發佈:2018-03-20
我們 操作 target 其余 java mage 右移 inf light
1.快速排序的基本思想
1.從數組中選取一個數為基準數,一般是選取第一個為基準數
2.其余數據和這個基準數進行比較,大的放一邊,小的放在另一邊
3.基準數兩邊的數組再重復上述操作
2.以例為證
1.初始化數組如下
2.然後進行替換
過程如下:
(1)對數組進行從小到大排列,現在我們選取第一個數17為基準數,從最右邊開始比(這裏一定要從最右邊開始,要不自己試試會怎樣),右邊第一個數是14小於17,所以索引保持在14的位置準備替換,然後從左往右找3小於17不用替換,索引向右移動一位,發現62大於17,停止查找並和之前的14替換,第一次替換結果如下。
第一對數據替換後結果
(2)現在進行第二對數據替換,62所在索引向左移動一位,發現值為1,小於17,停止查找並等待替換,4所在索引向右移動一位,值為4小於17,繼續向右移動一位,值為56大於17,和之前的1進行替換,第二次替換的結果如下。
第二對數據替換後結果
(3)第三對數據替換後結果
(4)繼續移動右側索引,發現右側索和左側索引重合了,到達了13的位置,這時就用13和基準數進行交換。
第四對數據替換之後
(5)然後17左邊為一個數組,17右邊為一個數組,分別執行上述操作,最後結果如下:
3.上代碼
private static void quickSort(int arr[],int low,int high) { int l = low; int h = high; int target = arr[low]; while (l < h) { while (l < h && arr[h] >= target) h--; if (l < h) { int temp = arr[h]; arr[h] = arr[l]; arr[l] = temp; l++; } while (l < h && arr[l] <= target) l++; if (l < h) { int temp = arr[h]; arr[h] = arr[l]; arr[l] = temp; h--; } } if (l > low) quickSort(arr, low, l - 1); if (h < high) quickSort(arr, l + 1, high); }
小白眼裏的快速排序