标签:排序算法
递归法
#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