标签:排序算法
递归法
#include<iostream>
using namespace std;
void Merge(int r[],int r1[],int b,int m,int e){
int i=b;
int j=m+1;
int k=b;
while((i<=m)&&(j<=e)){
if(r[i]<=r[j]){
r1[k]=r[i];
i++;
k++;}
else{
r1[k]=r[j];
j++;
k++;}
}
if((i<=m)){
while(i<=m){
r1[k++]=r[i++];}
}
else if(j<=e){
while(j<=e){
r1[k++]=r[j++];}
}
}
void MergeSort(int r[],int r1[],int s,int t){
int r2[100];
if (s==t){
r1[s]=r[s];
}
else{
int m=(s+t)/2;
MergeSort(r,r2,s,m);
MergeSort(r,r2,m+1,t);
Merge(r2,r1,s,m,t);
}
}
void main(){
int a[7]={8,7,9,3,4,1,2};
MergeSort(a,a,0,6);//递归调用 使得可以更新a值
for(int i=0;i<7;i++){
cout<<a[i]<<' ';}
system("pause");
}#include<iostream>
using namespace std;
void Merge(int r[],int r1[],int b,int m,int e){//一次归并
int i=b,j=m+1,k=b;
while((i<=m)&&(j<=e)){
if(r[i]>=r[j]){
r1[k++]=r[i++];
}
else{
r1[k++]=r[j++];
}
}
if(i<=m){
while(i<=m)
r1[k++]=r[i++];
}
else if(j<=e){
while(j<=e)
r1[k++]=r[j++];
}
}
void MergePass(int r[],int r1[],int n,int h){//一趟排序
int i=0;
while(i<=n-2*h){
Merge(r,r1,i,i+h-1,i+2*h-1);
i=i+2*h;
}
if(i<n-h){
Merge(r,r1,i,i+h-1,n-1);
}
else{
for(int s=i;s<n;s++){
r1[s]=r[s];
}
}
}
void MergeSort(int r[],int r1[],int n){
int h=1;
while(h<n){
MergePass(r,r1,n,h);
h=h*2;
for(int i=0;i<n;i++){
r[i]=r1[i];//更新序列值
}
}
}
void main(){
int a[7]={8,7,9,4,1,2,3};
int b[7];//非递归
MergeSort(a,b,7);
for(int i=0;i<7;i++){
cout<<b[i]<<' ';}
system("pause");
}标签:排序算法
原文地址:http://blog.csdn.net/eliza1130/article/details/44218903