加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

归并排序C++实现

发布时间:2020-12-16 07:45:24 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #includeiostream #includefunctional #includememory #includearray using namespace std; const int CNT = 10; void merge_sort(arrayint,CNT,int);

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

    #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,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); //递归使右半部分有序  
      
            //必须把下面的代码放在下面,为了使最后能够处理原先整数组  
            unique_ptr<int[]> temp(new int[last + 1]); //这里的last是实际下标,所以要加1  
            int f = first; //要把first保存一下,最后合并到原数组中时使用  
            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++];  
            }  
      
            //把比较完成的两部分合起来放在原数组中  
            for (int i = 0; i < k; i++)  
            {  
                arr[f + i] = temp[i];  
            }  
        };  
      
        Merge(arr,cont / 2,cont - 1); //中间用cont和cont-1都可,作用只是把最初的数组分为两个  
    }  


以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读