归并排序
来源:互联网 发布:燕郊seo 编辑:程序博客网 时间:2024/05/29 15:47
/* *算法描述:1、把前一半排序 2、把后一半排序 3、把两半归并到一个新的有序数组,然后再拷贝到原数组,排序完成 */ #include <iostream> using namespace std; void Merge(int a[],int s,int m,int e,int tmp[]) {//将数据a的局部a[s,m]和a[m+1,e]合并到tmp,并保证tmp有序,然后再拷贝到a[s,e] int pb = 0; int p1 = s,p2 = m+1; while(p1<= m && p2<= e) { if(a[p1] < a[p2]) tmp[pb++] = a[p1++]; else tmp[pb++] = a[p2++]; } while( p1 <= m) tmp[pb++] = a[p1++]; while( p2 <= e) tmp[pb++] = a[p2++]; for(int i=0 ;i<e-s+1 ;i++) a[s+i] = tmp[i]; } void MergeSort(int a[],int s,int e,int tmp[])//把数组a从下标s到e的部分进行归并排序,tmp是中转数组 { if(s < e) { int m = s +(e-s)/2;//m作为s和e的中点 MergeSort(a,s,m,tmp);//把前一半排序 MergeSort(a,m+1,e,tmp);//把后一半排序 Merge(a,s,m,e,tmp);//把两半归并到一个新的有序数组,然后再拷贝到原数组,排序完成 } } int a[10] = {25,96,65,48,51,24,12,39,91,24}; int b[10]; int main() { int size = sizeof(a)/sizeof(int); MergeSort(a,0,size-1,b);//进行归并排序 for(int i= 0; i<size; ++i) { cout << a[i] << ","; } cout << endl; return 0; }
0 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- LeetCode 22. Generate Parentheses
- SVN uuid 报错解决方法
- linux centos6.5下安装svn方法
- Asp.Net MVC4.0 官方教程 入门指南之七--增加搜索方法和视图
- yum在Centos下安装svn
- 归并排序
- glide在瀑布流中图片变形的问题
- 如何解决jsp:include标签在包含html文件时遇到的乱码问题
- linux密码忘记,但是保留密码可以进去时修改密码
- VS2010编译出现错误,提示无法启动程序“F:\Debug\ALL-BUILD”,系统找不到指定的文件。
- CentOS6.5中修改yum源
- Linux下搭建高效的SVN
- MAC npm 需要管理员权限问题
- 基数排序