zoukankan      html  css  js  c++  java
  • 数据结构-排序-归并排序

                    归并排序

    • 什么事归并排序??就是把几个有序序列合并
    •  先讲简单的2个有序的归并排序
    • 思路很简单,不停的比较两个数组的第一个,谁大就把它插入第三方数组,然后下标++,当某一数组遍历完了,直接把另一个数组剩下的值插入即可。
    • void two_sort(const vector<int>& v1,const vector<int>& v2,vecotr<int>& v3)
      {
          int i=0,j=0,k=0;
          while(i<v1.size()&&j<v2.size())
          {
              if(v1[i]<v2[j])
                 v3.push_back(v1[i++])else
                 v3.push_back(v2[j++]);
          }
       if(i<v1.size())
          {
          while(i<v1.size())
              v3.push_back(v1[i++]);
         }
         else
        {
          while(j<v2.size())
              v3.push_back(v2[j++]);
        }
      }

      理解了这个归并排序那么真正的归并排序也非常简单了。

    • 直接上代码
    • /一次归并排序,两个有序序列分别为v[s]~v[m],v[m+1]~v[t],这里把v1看作两个有序列
      void Merge(vector<int>& v1,int first,int mide,int last,vector<int>& v2)
      {
          int i=first,j=mide+1;
          while(i<=mide&&j<=last)
          {
              if(v1[i]<v1[j])
                 v2.push_back(v1[i++]);
              else
                 v2.push_back(v1[j++]);
          }
              if(i<mide)
          {
          while(i<mide)
              v2.push_back(v1[i++]);
         }
         else
        {
          while(j<last)
              v2.push_back(v1[j++]);
        }
          for(int i=0;i<last;i++)
              v1[i]=v2[i];
      }
      //归并排序递归
      void mergesort(vector<int>&v1, int first, int last, vector<int>&v2)
      {
          if (first < last)           //当first和last相等时候退出循环
          {
              int mid = (first + last) / 2;
              mergesort(v1, first, mid, v2);    //左边有序
              mergesort(v1, mid + 1, last, v2); //右边有序
              Merge(v1, first, mid, last, v2); //再将二个有序数列合并
          }
      }
  • 相关阅读:
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台读写 Sqlite 提示 no such table 找不到文件
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 控制台 Hangfire 后台定时任务
    dotnet 获取指定进程的输入命令行
    dotnet 获取指定进程的输入命令行
    PHP sqrt() 函数
    PHP sinh() 函数
    PHP sin() 函数
    PHP round() 函数
  • 原文地址:https://www.cnblogs.com/DJC-BLOG/p/9069844.html
Copyright © 2011-2022 走看看