//---------插入排序
void insertsort(int *nums,int len){
int i,j;
for(i=1;i<len;i++){
int temp=nums[i];
for(j=i;j>0&&nums[j-1]>temp;j--)
nums[j]=nums[j-1];
nums[j]=temp;
}
}
//-------------冒泡排序
void bubblesort(vector<int>&nums){
int len=nums.size();
for(int i=0;i<len;i++){
for(int j=1;j<len;j++){
if(nums[j]<nums[j-1])
swap(nums[j],nums[j-1]);
}
len --;
}
}
//------------快速排序----------
int partion(vector<int>&nums,int start, int end){
int l=start;
int r=end;
int pivot=nums[end];
while(l!=r){
while(nums[l]<=pivot && l<r)
l ++;
while(nums[r]>=pivot && l<r)
r --;
swap(nums[l],nums[r]);
}
swap(nums[l],nums[end]);
return l;
}
void quicksort(vector<int>&nums,int start,int end){
if(start==end)
return;
int index=partion(nums,start,end);
if(index>start)
quicksort(nums,start,index-1);
if(end>index)
quicksort(nums,index+1,end);
}
//------------归并排序---------
void merge(vector<int>&nums,int start,int mid,int end){
int n1=mid-start+1;
int n2=end-mid;
vector<int>L(n1);
vector<int>R(n2);
for(int i=0;i<n1;i++){
L[i]=nums[start+i];
}
for(int i=0;i<n2;i++){
R[i]=nums[mid+1+i];
}
int i=0,j=0,k=start;
while(i<n1 && j<n2){
if(L[i]<=R[j]){
nums[k++]=L[i];
i++;
}
else {
nums[k++] = R[j];
j++;
}
}
while(i<n1){
nums[k++]=L[i++];
}
while(j<n2){
nums[k++]=R[j++];
}
}
void mergesort(vector<int>&nums,int start,int end){
if(start>=end)
return;
int mid=(end+start)/2;
mergesort(nums,start,mid);
mergesort(nums,mid+1,end);
merge(nums,start,mid,end);
}
int main() {
// int nums[]={5,3,1,6,8,4};
// insertsort(nums,6);
// for(int t=0;t<6;t++)
// cout<<nums[t];
vector<int>nums={5,3,10,8,4,9,1,13,7,15};
//bubblesort(nums);
//quicksort(nums,0,nums.size()-1);
mergesort(nums,0, nums.size()-1);
for(int i=0;i<nums.size();i++)
cout<<nums[i]<<" ";
cout<<endl;
// for(int i=0;i<10;i++)
// cout<<rand()%10;
return 0;
}