完整归并排序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;
}
#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;
}
- 完整归并排序C++代码
- 归并排序的完整C++实现代码
- 归并排序C语言代码
- 二路归并排序算法实现-完整C语言程序
- 归并排序算法 C代码实现
- 归并排序算法 C代码实现
- 归并排序算法 C代码实现
- 归并排序的C代码实现
- 归并排序(C/C++)
- 八大排序算法及完整c代码—冒泡排序
- 八大排序算法及完整c代码—快速排序
- 归并排序代码
- 归并排序代码
- 归并排序代码
- 归并排序标准代码
- 归并排序代码实现
- 归并排序代码实现
- 归并排序(代码片段)
- 华为boss力荐公司高层看的一篇文章,很长很经典
- 重构的最佳时机
- Android蓝牙开发浅析
- [leetcode] Remove Duplicates from Sorted List
- UVa 11388 - GCD LCM
- 完整归并排序C++代码
- java性能优化开发之--禁用System.out.println
- WWF规则引擎ruleEngine的一个开发例子
- Android系统的开机画面显示过程分析
- JAVA设计模式五大原则
- 关于java.lang.IllegalArgumentException: 'dataSource' or 'jdbcTemplate' is required 类似问题的解决总结
- 反射方法总结
- QTP技巧(上)
- 截取屏幕图片