• 归并排序(c++,递归)


    放上c++代码模板(但是该版本中,还可以再进一步优化成原地算法,即不开辟新的空间;本代码中空间复杂度为n,不是1)

     1 #include <iostream>
     2 #include<vector>
     3 using namespace std;
     4 
     5 void merge_func(vector<int> &v, int l, int m, int r)
     6 {
     7     vector<int> t;
     8     int p=l, q=m+1;
     9     while(p<=m && q<=r)
    10     {
    11         if(v[p]>v[q])
    12         {
    13             t.push_back(v[q]);
    14             q++;
    15         }
    16         else
    17         {
    18             t.push_back(v[p]);
    19             p++;
    20         }
    21     }
    22     while(p<=m)
    23         t.push_back(v[p++]);
    24     while(q<=r)
    25         t.push_back(v[q++]);
    26 
    27     for(int i=l;i<=r;i++)
    28         v[i] = t[i-l];
    29 
    30 }
    31 
    32 void merge_sort(vector<int> &v, int l, int r)
    33 {
    34     if(l<r)
    35     {
    36         int m = l+(r-l)/2;   //先找到中点位置
    37         merge_sort(v,l,m);   //左侧归并排序
    38         merge_sort(v,m+1,r);  //右侧归并排序
    39         merge_func(v,l,m,r);  //合并左侧和右侧
    40     }
    41 }
    42 
    43 int main()
    44 {
    45     vector<int> v={6,4,2,3,1,5};
    46     //vector<int> v={3,6,1,2,4,7,5};
    47     merge_sort(v,0,v.size()-1);
    48     for(auto i:v)
    49         cout<<i<<endl;
    50     return 0;
    51 }
  • 相关阅读:
    python
    python
    日常使用 小技巧 ~ (长期更新)
    日常的 小 bug ~(长期更新)
    BUUCTF Re部分wp(MIPS特别篇)
    [FlareOn5]FLEGGO
    [FlareOn6]BMPHIDE
    配置搭建单机rocketmq及rocketmq集群
    nessus服务安装与使用
    HTTP缓存技术详解
  • 原文地址:https://www.cnblogs.com/qiezi-online/p/13253847.html
Copyright © 2020-2023  润新知