中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

快速排序C++實現(xiàn)

2018-07-20    來源:open-open

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用
    //快速排序  
    #include<iostream>  
    #include<functional>  
    #include<Windows.h>  
      
    using namespace std;  
      
    void qksort(int* arr, int cnt)  
    {  
        function<int(int*, int, int)> getPivot = [&](int* arr, int left, int right)->int  
        {  
            int mid = (left + right) / 2;  
            if (arr[left] > arr[mid])  
                swap(arr[left], arr[mid]);     
            if (arr[left] > arr[right])  
                swap(arr[left], arr[right]);  
            if (arr[mid] > arr[right])  
                swap(arr[mid], arr[right]);  
            swap(arr[mid], arr[right - 1]);  
            return arr[right - 1];  
        };  
      
        function<void(int*, int, int)> insertSort = [&](int* arr, int begin, int end)  
        {  
            int i = 0, j = 0;  
            for (i = begin + 1; i <= end; i++)  
            {  
                int tmp = arr[i];  
                for (j = i; j > begin && arr[j - 1] > tmp; j--)  
                    arr[j] = arr[j - 1];  
                arr[j] = tmp;  
            }  
        };  
      
        function<void(int*, int, int)> qk = [&](int* arr, int left, int right)  
        {  
            if (left + 9 <= right)    //當數(shù)組元素大于等于10個的時候,我們用快速排序  
            {  
                int pivot = getPivot(arr, left, right);  
                int i = left;  
                int j = right - 1;  
                while (1)  
                {  
                    while (arr[++i] < pivot){}  
                    while (arr[--j] > pivot){}  
                    if (i < j)  
                        swap(arr[i], arr[j]);  
                    else  
                        break;  
                }  
                swap(arr[i], arr[right - 1]);  
                qk(arr, left, i - 1);  
                qk(arr, i + 1, right);  
            }  
            else                //當數(shù)組元素小于10個的時候我們用插入排序  
                insertSort(arr, left, right);  
        };  
      
        qk(arr, 0, cnt - 1);  
    };  
      
    int main()  
    {  
        int arr[1000];  
        int tmp = -1;  
      
        for (int i = 0; i < 500; i++)  
        {  
            if (i % 2)  
                arr[i] = i*tmp;  
            else  
                arr[i] = i;  
        }  
        for (int i = 500; i < 1000; i++)  
        {  
            if (i % 2)  
                arr[i] = i*tmp;  
            else  
                arr[i] = i;  
        }  
      
        //我們可以對上面進行全不快排還是部分快排部分插入排序進行時間上的測試,理論上我們元素個數(shù)界限是10個,取十個在有些時候不一定是最佳的,但是可以避免一些有害的特殊情形  
        {  
            LARGE_INTEGER  large_interger;  
            double dff;  
            __int64  c1, c2;  
            QueryPerformanceFrequency(&large_interger);  
            dff = large_interger.QuadPart;  
            QueryPerformanceCounter(&large_interger);  
            c1 = large_interger.QuadPart;  
      
            qksort(arr, 1000);  
      
            QueryPerformanceCounter(&large_interger);  
            c2 = large_interger.QuadPart;  
            printf("計時%lf毫秒\n", (c2 - c1) * 1000 / dff);  
        }  
      
        for (auto i : arr)  
            cout << i << endl;  
      
        cin.get();  
        return 0;  
    }  

標簽: swap

版權(quán)申明:本站文章部分自網(wǎng)絡,如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇: 獲取apk文件的權(quán)限信息

下一篇:獲取apk文件的簽名信息(未安裝, 只是一個apk文件)