合并排序实现
YOYO
posted @ 2009年4月29日 07:56
in 【算法】与【数据结构】
with tags
排序
, 2058 阅读
= =
-
#include<iostream>
-
using namespace std;
-
-
/******************************************
-
* 合并两个有序的子数组
-
*
-
* 输入:整数数组A[],下标p,q,r,元素个数m
-
* 其中A[p]~A[q]和A[q+1]~A[r]已按递增顺序排序
-
* 输出:按递增顺序排序的子数组A[p]~A[r]
-
******************************************/
-
void merge(int A[], int p, int q, int r, int m){
-
int *bp = new int[m];
-
int i,j,k;
-
i = p; j = q+1; k=0;
-
while(i<=q&&j<=r){ // i从p开始,j从q+1开始 比较A[i]和A[j],递减放入新数组
-
if(A[i]<=A[j]){
-
bp[k++] = A[i++];
-
}else{
-
bp[k++] = A[j++];
-
}
-
}
-
if(i==q+1){ // 若A[p]~A[q]已经输入完,则将A[q+1]~A[r]中未录入的继续录入
-
for(;j<=r;j++){
-
bp[k++] = A[j];
-
}
-
}else{ // 若A[q+1]~A[r]已经输入完,则A[p]~A[q]将中未录入的继续录入
-
for(;i<=q;i++){
-
bp[k++] = A[i];
-
}
-
}
-
k = 0;
-
for(i=p; i<=r; i++){ // 把排序好的数存回A
-
A[i] = bp[k++];
-
}
-
delete bp;
-
}
-
-
/******************************************
-
* 合并排序算法
-
*
-
* 输入:具有n个元素的数组A[]
-
* 输出:按递增顺序排序的数组A[]
-
******************************************/
-
void merge_sort(int A[], int n){
-
int i,s,t = 1;
-
while(t<n){ // 每2个含t/2个元素的数组进行合并,合并完后t*2
-
s = t, t = 2*s, i = 0;
-
while(i+t<n){
-
merge(A,i,i+s-1,i+t-1,t);
-
i = i + t;
-
}
-
if(i+s<n){
-
merge(A,i,i+s-1,n-1,n-i);
-
}
-
}
-
}
-
-
int main(){
-
int i,n;
-
-
cout<<"请输入数组元素个数:";
-
cin>>n;
-
-
cout<<"请输入元素:"<<endl;
-
int* A = new int[n];
-
for(i=0;i<n;i++){
-
cin>>A[i];
-
}
-
-
merge_sort(A,n);
-
-
cout<<"排序结果:"<<endl<<A[0];
-
for(i=1;i<n;i++){
-
cout<<" "<<A[i];
-
}
-
cout<<endl;
-
-
return 0;
-
}
- 无匹配