完整归并排序C++代码

#include <iostream>
#include <cassert>
using namespace std;


void MergeTwoArr(int *pData, int *pTempData,int left,int mid,int right)
{
     // left - mid
// mid+1 -right 
int *pl= &pData[left] ;
int *pr= &pData[mid+1];
int size=right-left+1;
int offset=0;
while(offset<size)
{
   if( pl > &pData[mid] && pr<=&pData[right] )
pTempData[offset++] = *pr++ ;
else if( pl<= &pData[mid] && pr>&pData[right])
pTempData[offset++] = *pl++ ;
else
pTempData[offset++] = *pl > *pr ? *pr++ : *pl++;


}
void MergeSortCore(int *pData,int *pTempData, int left,int right)
{
   if(left<right)
   {
      int mid=left+ ( (right-left)>>1 ) ;


 MergeSortCore(pData,pTempData,left,mid);
 MergeSortCore(pData,pTempData,mid+1,right);


      MergeTwoArr(pData,pTempData,left,mid,right);
 memcpy( &pData[left],pTempData,(right-left+1)*sizeof(int) );


   }
}
void MergeSort(int *pData, int n)
{
   assert( pData!=NULL && n>0 );
   int left=0, right=n-1;


   int *pTempData=new int[n];
   assert(pTempData!=NULL);


   MergeSortCore(pData,pTempData,left,right);
   delete [] pTempData;
}


void print(int *pData, int n)
{
   assert(pData!=NULL && n>0);
   for(int i=0;i<n;++i)
  cout<<pData[i]<<" ";
   cout<<endl;
}


int main()
{
int pData[]={16,3,5,43,9,6,-36,100};
MergeSort(pData,sizeof(pData)/sizeof(int) );
print(pData,sizeof(pData)/sizeof(int) );

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值