首页 > 代码库 > 归并排序
归并排序
#include<iostream> using namespace std; #define MAX 10000 int array[MAX]; //待排序数组 const int MAXN=0x7fffffff; void Merge(int array[],int start, int mid, int end) { int b[MAX],c[MAX],k,i,j; int n1=mid-start+1; int n2=end-mid; for (i=0;i<n1;i++) //copy前半部分 b[i] = array[start+i]; for (i=0;i<n2;i++) //cpoy后半部分 c[i]=array[mid+i+1]; b[n1]=c[n2]=MAXN; for (k=start,i=0,j=0;k<=end;k++) { if (b[i]<=c[j]) { array[k]=b[i]; i++; } else { array[k]=c[j]; j++; } } } // 归并排序 void MergeSort(int array[],int start, int end) { if(start<end) { int i=(end+start)/2; MergeSort(array,start,i); MergeSort(array,i+1,end); Merge(array,start,i,end); // 合并前后两部分 } } int main() { int i,n; cout<<"数组元素个数:"; cin>>n; cout<<"数组元素值:"<<endl; for(i=0;i<n;i++) cin>>array[i]; MergeSort(array,0,n-1); cout<<"排序后:"<<endl; for(i=0;i<n;i++) cout<<array[i]<<" "; cout<<endl; return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。