完整归并排序C++代码

来源:互联网 发布:最新网络灰色项目干货 编辑:程序博客网 时间:2024/06/10 07:52
#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;
}