算法导论第二章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
原创粉丝点击