分治法进行排序

#include <iostream>  
#include <vector>
using namespace std; 
std::vector<int> v1;
std::vector<int> v2;
int numArray[5]={8,21,66,158,15};
void merge(int * num,int begin,int mid,int end){// 对两个分治的数组进行何合并
      int temp1=begin;
      while(temp1<=mid){
           v1.push_back(num[temp1++]);
                    
      }
      
       int temp2=mid+1;
       while(temp2<=end){
        v2.push_back(num[temp2++]);
   
      }// 首先存储数组     
    vector<int>::iterator it1,it2;
    it1=v1.begin();
    it2=v2.begin();
    int pos=begin;//开始合并
    while(it1!=v1.end() && it2!=v2.end()){
     if (*it1<*it2){
       num[pos++]=*it1; 
       ++it1;     
   }
   else{
      num[pos++]=*it2;
      it2++;
     }

    }
while(it1!=v1.end()){
  num[pos++]=*it1; 
      ++it1; 

}
while(it2!=v2.end()){
  num[pos++]=*it2; 
      ++it2;       
}
v1.clear();
v2.clear();
 
}
void mergeSort(int *num,int begin,int end){
    if (begin<end)//退出条件
     {// 递归调用
      int mid=(begin+end)/2;
      mergeSort(num,begin,mid);
      mergeSort(num,mid+1,end);
      merge(num,begin,mid,end);
     }    



}






int main(){
  for (int i = 0; i < 5; ++i)
{
      cout<<numArray[i]<<" ";
    
}
cout<<endl<<"after mergeSort..."<<endl;
mergeSort(numArray,0,4);
for (int i = 0; i < 5; ++i)
{
      cout<<numArray[i]<<" ";
    
}
}
思路来源率 《算法东论》做了具体实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值