归并排序时间复杂度O(nlogn)
#include <iostream>
#include<vector>
using namespace std;
int j=0;
void merge(vector<int> &arr,int start1,int end1,int start2,int end2){
int n1=end1-start1+1;
int n2=end2-start2+1 ;
int arr_left[n1],arr_right[n2];
for(int i=0;i<=n1;i++) arr_left[i]=arr[start1+i];
for(int i=0;i<=n2 ;i++) arr_right[i]=arr[start2+i];
int left=0,right=0;
int p=start1;
while(left<n1&&right<n2){
if(arr_left[left]<arr_right[right]){
arr[p]=arr_left[left++];
}else{
arr[p]=arr_right[right++];
}
p++;
}
while(left<n1){
arr[p++]=arr_left[left++];
}
while(right<n1){
arr[p++]=arr_right[right++];
}
}
void mergeSort(vector<int> &arr,int start ,int end){
if(start<end){
int mid=start+(end-start)/2;
mergeSort(arr,start,mid);
mergeSort(arr,mid+1,end);
merge(arr,start,mid,mid+1,end) ;
}
}
int main(){
vector<int> arr;
int a[9] = {8,1,14,3 ,21 ,5, 2 ,7,10} ;
for(int i=0;i<sizeof(a)/4;i++){
arr.push_back(a[i]);
}
mergeSort(arr, 0,arr.size()-1);
for(int i=0;i<arr.size();i++){
cout<<arr[i]<<endl;
}
return 0;
}