首页 > 代码库 > 算法导论第二章C++实现归并算法排序
算法导论第二章C++实现归并算法排序
归并算法排序的思想算法导论中讲的还算比较清楚、
#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,将有数组的值赋给RIGHT for(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); } }
算法导论第二章C++实现归并算法排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。