分治排序示例

//此处只贴了代码,具体的执行过程在我的百度空间中给出了,就不搬过来了!

//链接是: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); } }


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值