//此处只贴了代码,具体的执行过程在我的百度空间中给出了,就不搬过来了!
//链接是:http://hi.baidu.com/wolinxuebin/blog/item/996f6dc851ca7ee252664f8e.html
// InsertionSort.cpp : 定义控制台应用程序的入口点。 // //#include "stdafx.h" #include<iostream> using namespace std; #define MAXNUM 2147483647 //定义无穷大 void merge(int *a,int p,int q,int r);//合并算法 void mergeSort(int *a,int p,int r); //合并排序 int main() { int size, *a; while(1) { cout<<"输入字符串长度:"<<endl; cin>>size; //输入字符串长度 if(size > 0) { cout<<"请输入"<<size<<"个待排序数字:"<<endl; a = new int [size]; //开辟动态数组空间 for(int i=0; i<size; i++) { cin>>a[i]; } mergeSort(a,1,size); //调用分治排序程序 } else cout<<"输入长度错误!"<<endl; for(int i=0; i<size; i++) //打印数组 { cout<<a[i]<<" "; } cout<<endl; } return 0; } void merge(int *a,int p,int q,int r) //合并算法 { int i,j; int n1,n2; n1 = q - p + 1; n2 = r - q; int *L = new int[n1+1]; //开辟左右两个数组 int *R = new int[n2+1]; for( i=0; i<n1; i++) { L[i] = a[p+i-1];} //将a中的值赋值给左右数组(L、R) for( j=0; j<n2; j++) { R[j] = a[q+j];} L[n1] = MAXNUM; //将数组最后一位用无穷大代替 R[n2] = MAXNUM; i = j =0; for(int k=p-1; k<r; k++) { if(L[i]<=R[j]) { //比较赋值 a[k] = L[i]; i++; } else { a[k] = R[j]; j++; } } delete []L; //删除数组释放内存 delete []R; } void mergeSort(int *a,int p,int r) //合并排序 { int q; if(p<r){ q = (p + r)/2; mergeSort(a,p,q); mergeSort(a,q+1,r); merge(a,p,q,r); } }
819

被折叠的 条评论
为什么被折叠?



