天天看點

快速排序之三路快速排序

之前介紹了快速排序和優化版的快速排序

下面再來介紹一種 【三路快速排序】

快速排序之三路快速排序

【代碼實作】

//三路快速排序
        template<typename T>
        static void quickSort3Ways(T arr[], int n)
        {
            __quickSort3Ways(arr, 0, n-1);
        }
        template<typename T>
        static void __quickSort3Ways(T arr[], int l, int r)
        {
            if( l >= r) return;
            int i = l + 1;
            int lt = l;
            int gt = r + 1;
            T v = arr[l];
            while(i < gt)
            {
                if(arr[i] == v)
                {
                    i++;
                }
                else if(arr[i] < v)
                {
                    swap(arr[lt + 1], arr[i]);
                    lt++;
                    i++;
                }
                else if(arr[i] > v)
                {
                    swap(arr[i], arr[gt - 1]);
                    gt--;
                }
            }
            swap(arr[l], arr[lt]);
            __quickSort3Ways(arr, l, lt - 1);
            __quickSort3Ways(arr, gt, r);
        }

           

【測試】

快速排序之三路快速排序

繼續閱讀