1. 程式人生 > >交換排序——2快速排序實現

交換排序——2快速排序實現

vision log 遍歷 return 否則 quick 遞歸 private 交換

快速排序的效率比較高的算法,如果我們只能掌握一種排序,那快速排序是最佳的選擇。

private int Division(int[] list, int left, int right)
        {
            // 以最左邊的數(left)為基準
            int bs = list[left];
            while (left < right)
            {
                // 從序列右端開始,向左遍歷,直到找到小於base的數
                while (left < right && list[right] >= bs)
                    right
--; // 找到了比base小的元素,將這個元素放到最左邊的位置 list[left] = list[right]; // 從序列左端開始,向右遍歷,直到找到大於base的數 while (left < right && list[left] <= bs) left++; // 找到了比base大的元素,將這個元素放到最右邊的位置 list[right] = list[left]; }
// 最後將base放到left位置。此時,left位置的左側數值應該都比left小; // 而left位置的右側數值應該都比left大。 list[left] = bs; return left; } public void QuickSort(int[] list, int left, int right) { // 左下標一定小於右下標,否則就越界了 if (left < right) {
// 對數組進行分割,取出下次分割的基準標號 int bs = Division(list, left, right); // 對“基準標號“左側的一組數值進行遞歸的切割,以至於將這些數值完整的排序 QuickSort(list, left, bs - 1); // 對“基準標號“右側的一組數值進行遞歸的切割,以至於將這些數值完整的排序 QuickSort(list, bs + 1, right); } }

交換排序——2快速排序實現