//归并排序 #include<vector> #include<iostream> using namespace std; void merge(vector<int> array,vector<int>&res,int m,int n, int t){ int i=m,j=n,k=m; for(;i<n&&j<=t;++k){ if(array[i]<=array[j]) res[k]=array[i++]; else res[k]=array[j++]; } while(i<n) res[k++]=array[i++];// while(j<=t) res[k++]=array[j++];// } void mSort(int left,int right,vector<int> array,vector<int>&res){ if(left==right){/ res[left]=array[left]; return; } int mid=(left+right)/2;//向下取整,所以不允许mid-1 mSort(left,mid,array,res);// mSort(mid+1,right,array,res);// merge(res,res,left,mid+1,right); //第一个res传值(拷贝副本 归并前的res),第二个res传引用(修改原res,不会影响拷贝的副本 归并后的res) } void mergeSort(vector<int> array,vector<int>&res){ mSort(0,array.size()-1,array,res); } //测试 int main(){ int size; cin>>size; vector<int> array(size); for(int i=0;i<size;++i){ cin>>array[i]; } vector<int> res(array.size()); mergeSort(array,res); for(int i=0;i<res.size();++i){ cout<<res[i]<<endl; } return 0; }