算法导论第二章C++实现归并排序
来源:互联网 发布:ubuntu 17.04 openjdk 编辑:程序博客网 时间:2024/05/02 02:54
归并排序的思想算法导论里面讲的很详细的,,但数学推导好像有点难,,程序很简单
#include<iostream>using namespace std;void guibing(int *_array,int p,int q,int r);void merge_sort(int *_array,int p,int r);int main(){ int a[8]={2,4,5,7,1,2,3,6}; int j1=0; int j2=7; merge_sort(a,j1,j2); int i=0; for(;i<8;i++) cout<<a[i]<<' '; cout<<endl; //int length;//length=sizeof(a)/sizeof(int);//cout<<length<<endl;//cout<<sizeof(int)<<endl;//cout<<sizeof(a)<<endl;system("pause"); return 0;}//定义归并函数void guibing(int *_array,int p,int q,int r)//p表示左数组第一个元素下标,q表示左数组最后一个元素下标,r表示右数组最后一个元素下标{ int n1,n2;n1=q-p+1;//左数组的长度n2=r-q;//右数组的长度int *left=NULL,*right=NULL;left=(int *)malloc(sizeof(int)*n1);right=(int *)malloc(sizeof(int)*n2);int i=0,j=0;//下面将左数组的值赋给LEFT,将有数组的值赋给RIGHTfor(i;i<n1;i++)left[i]=_array[p+i];for(j;j<n2;j++)right[j]=_array[q+1+j];//下面将左右值进行合并int i1=0,i2=0,k=p;while(i1<n1&&i2<n2){if(left[i1]<=right[i2]){_array[k]=left[i1];i1++;k++;}else{_array[k]=right[i2]; i2++; k++;}}for(;i1<n1;i1++){ _array[k]=left[i1]; k++;}for(;i2<n2;i2++){ _array[k]=right[i2]; k++;}}//下面定义分治算法void merge_sort(int *_array,int p,int r){ int q; if(p<r) { q=(int)((p+r)/2);merge_sort( _array,p,q);merge_sort( _array,q+1,r);guibing(_array,p,q,r); } }
0 0
- 算法导论第二章C++实现归并算法排序
- 算法导论第二章C++实现归并排序
- 【算法导论】第二章之归并排序
- 算法导论第二章-归并排序
- 算法导论第二章之归并排序
- 算法导论第二章(归并排序)
- 【算法导论】归并排序,C语言实现
- 算法导论第二章总结:插入排序、归并排序
- 【算法导论】归并排序实现
- 算法导论 - 归并排序的 C 语言实现
- 归并排序的C语言实现【严蔚敏+算法导论】
- 算法导论中的归并排序C语言实现
- 算法导论 之 归并排序[C语言]
- C++ 归并排序实现(算法导论)
- C++ 归并排序实现(算法导论)
- 算法导论:归并排序java实现
- 【java实现】算法导论之归并排序
- 【算法导论】归并排序
- c#中如何通过tabcontrol访问上边的tabpage
- left join 条件写法 【重要】
- 详解Android中AsyncTask的使用
- 判断设备型号,最近新出了iphone6,iphone6 plus,ipad air等
- Android突破锁屏
- 算法导论第二章C++实现归并排序
- python加密文件时正确的padding方法
- 墙裂推荐一本案例驱动的PhoneGap入门书,早看早收货
- Java的多线程技术
- PL/SQL Developer ORA-01017: 用户名/口令无效; 登录被拒绝 问题解决
- ArcEngine数据的查找,插入,删除,更新
- Python列表操作自定义函数(二)
- myeclipse2014/eclipse luna 等最新版本安装aptana插件
- pdf格式转换器下载免费版