首页 > 代码库 > 归并排序
归并排序
#include "iostream.h" using namespace std; void merge(int A[], int Tmp[], int leftStart,int rightStart, int rightEnd){ int number = rightEnd-leftStart+1; int leftEnd = rightStart-1; int left=leftStart; int right = rightStart; int pos= leftStart; while(left<=leftEnd&&right<=rightEnd){ if(A[left]<=A[right]){ Tmp[pos++]=A[left++]; }else{ Tmp[pos++]=A[right++]; } } while(left<=leftEnd){ Tmp[pos++]=A[left++]; } while(right<=rightEnd){ Tmp[pos++]=A[right++]; } int i=0; //记得把Tmp拷回A,保证A有序 while(i<number){ A[rightEnd]=Tmp[rightEnd]; rightEnd--; i++; } } void msort(int A[], int Tmp[], int left,int right){ if(left<right){ int center = (left+right)/2; msort(A,Tmp,left,center); msort(A,Tmp,center+1,right); merge(A,Tmp,left,center+1,right); } } void mergeSort(int A[], int N){ int *Tmp = (int*)malloc(sizeof(int)*N); if(Tmp){ msort(A,Tmp,0,N-1); }else{ cout<<"No space"<<endl; } } int main() { int A[100]; int N; cin>>N; for(int i=0;i<N;i++){ cin>>A[i]; } mergeSort(A,N); for(int i=0;i<N;i++){ cout<<A[i]<<" "; } cout<<endl; return 0; }
归并排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。