#include<cstdio>

void selection_sort(int arr[],int len)
{
	int minn,idx;
	
	for(int i=0;i<len;++i)
	{
		minn=2147483647;
		idx=i;
		
		for(int j=i;j<len;++j)
			if(arr[j]<minn)
			{
				minn=arr[j];
				idx=j;
			}
			
		int temp=arr[i];
		arr[i]=arr[idx];
		arr[idx]=temp;
	}
	
	//时间复杂度:O(n^2) 
	//空间复杂度:O(1) 
	//是否稳定:不稳定 
}

void bubble_sort(int arr[],int len)
{
	for(int i=0;i<len;++i)
		for(int j=0;j<i;++j)
			if(arr[i]>arr[i+1])
			{
				int temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
			}
			
	//时间复杂度:O(n^2) 
	//空间复杂度:O(1) 
	//是否稳定:稳定 
}

void insertion_sort(int arr[],int len)
{
	int idx;
	
	for(int i=1;i<len;++i)
	{
		idx=i;
		
		while(arr[idx-1]>arr[idx])
		{
			int temp=arr[idx];
			arr[idx]=arr[idx-1];
			arr[idx-1]=temp;
			idx--;
		}
	}
	
	//时间复杂度:O(n^2) 
	//空间复杂度:O(1) 
	//是否稳定:稳定 
}

void quick_sort(int arr[],int left,int right)
{
	int i=left,j=right,flag=arr[left+(right-left)/2],temp;
	
	do
	{
		while(arr[i]<flag) i++;
		while(arr[j]>flag) j--;
		
		if(i<=j)
		{
			int temp=arr[i];
			arr[i]=arr[j];
			arr[j]=temp;
      i++;
      j--;
		}
	}
	while(i<=j);
	
	if(left<j) quick_sort(arr,left,j);
	if(right>i) quick_sort(arr,i,right);
	
	//时间复杂度:O(n log n) 
	//空间复杂度:O(log n) 
	//是否稳定:不稳定 
}

void merge_sort(int a[],int t[],int l,int r)
{
	if(l>=r)
		return;
		
	int mid=l+(r-l)/2;
	
	merge_sort(a,t,l,mid);
	merge_sort(a,t,mid+1,r);
	
	int i=l,p=l,q=mid+1;
	
	while(p<=mid && q<=r)
	{
		if(a[p]<=a[q])
			t[i++]=a[p++];
		else
			t[i++]=a[q++];
	}
	
	while(p<=mid)
		t[i++]=a[p++];
	while(q<=r)
		t[i++]=a[q++];
		
	for(int j=l;j<=r;++j)
		a[j]=t[j]; 
		
	//时间复杂度:O(n log n) 
	//空间复杂度:O(n) 
	//是否稳定:稳定 
}

int main()
{
	int a[]={6,5,4,3,2,1};
	int b[7]={};
	
	merge_sort(a,b,0,5);
	
	for(int i=0;i<6;++i)
		printf("%d ",a[i]); 
}