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

歸并排序C++實現(xiàn)

2018-07-20    來源:open-open

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用
    #include<iostream>  
    #include<functional>  
    #include<memory>  
    #include<array>  
      
      
    using namespace std;  
      
    const int CNT = 10;  
      
    void merge_sort(array<int, CNT>&, int);  
      
      
    int main()  
    {  
        array<int, CNT> arr = { 1, 5, 2, 4, 3, 7, 9, 8, 6, 0};  
      
        merge_sort(arr, CNT);  
        for (int i = 0; i < 10; i++)  
            cout << arr[i] << endl;  
      
      
        cin.get();  
        return 0;  
    }  
      
      
    void merge_sort(array<int, CNT>& arr, int cont)  
    {  
        function<void(array<int, CNT>&, int, int, int)> Merge = [&](array<int, CNT>& arr_, int first, int mid, int last)  
        {  
            if (first >= last) //除非第一個和最后一個重合的時候才停止,因為只有兩個的時候也需要排序  
            {  
                return;  
            }  
      
      
            Merge(arr_, first, (mid+first) / 2, mid); //遞歸使左半部分有序  
            Merge(arr_, mid + 1, (mid + 1 + last) / 2, last); //遞歸使右半部分有序  
      
            //必須把下面的代碼放在下面,為了使最后能夠處理原先整數(shù)組  
            unique_ptr<int[]> temp(new int[last + 1]); //這里的last是實際下標,所以要加1  
            int f = first; //要把first保存一下,最后合并到原數(shù)組中時使用  
            int t = mid + 1;  
            int k = 0;  
      
      
      
      
            //直到有一部分全部比較完 注意:要包括最后一個元素  
            while (first <= mid && t <= last)  
            {  
                if (arr[first] < arr[t])  
                {  
                    temp[k++] = arr[first++];  
                }  
                else  
                {  
                    temp[k++] = arr[t++];  
                }  
            }  
      
            //把剩余部分的東西處理完成  
            while (t <= last)  
            {  
                temp[k++] = arr[t++];  
            }  
      
            while (first <= mid)  
            {  
                temp[k++] = arr[first++];  
            }  
      
            //把比較完成的兩部分合起來放在原數(shù)組中  
            for (int i = 0; i < k; i++)  
            {  
                arr[f + i] = temp[i];  
            }  
        };  
      
        Merge(arr, 0, cont / 2, cont - 1); //中間用cont和cont-1都可,作用只是把最初的數(shù)組分為兩個  
    }  


標簽: 代碼

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

上一篇:獲取當前app的簽名信息

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