void bubble_sort(int a[],int len){
   //冒泡排序 
	int temp;
	for(int i=0;i<len-1;i++){
   
		for(int j=0;j<len-i-1;j++){
   
			if(a[j]>a[j+1]){
   
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			} 
		}
	}
} 
void selection_sort(int a[],int len){
   //选择排序 
	int temp;
	for(int i=0;i<len-1;i++){
   
		int min=i;
		for(j=i+1;i<len;j++){
   
			if(a[j]<a[min]){
   
				min=j;
			}
		}
		if(min!=i){
   
			temp=a[min];
			a[min]=a[i];
			a[i]=temp;
		}
	}

}
void insertion_sort(int a[],int len){
   //插入排序 
	int temp;
	for(int i=1;i<len;i++){
   
		temp=a[i];
		for(int j=i;j>0&&a[j-1]>temp;j--){
   
			a[j]=a[j-1];
		}
		a[j]=temp;
	}
} 
void shell_sort(int a[],int len){
   //希尔排序 
	int temp;
	for(int gap=len>>1;gap>0;gap=gap>>1){
   
		for(int i=gap;i<len;i++){
   
			temp=a[i];
			for(int j=i-gap;j>=0&&a[j]>temp;j-=gap){
   
				a[j+gap]=a[j];
			}
			arr[j+gap]=temp;
		}
	}
} 
//归并排序 
void merge_sort_recursive(int arr[],int reg[],int start,int end){
   
	if(start>=end)
		return;
	int len=end-start,mid=(len>>1)+start;
	int start1=start,end1=mid;
	int start2=mid+1,end2=end;
	merge_sort_recursive(arr,reg,start1,end1);
	merge_sort_recursive(arr,reg,start2,end2);
	int k=start;
	while(start1<=end1&&start2<=end2)
		reg[k++]=arr[start1]<arr[start2]?arr[start1++]:arr[start2++];
	while(start1<=end1)
		reg[k++]=arr[start1++];
	while(start2<=end2)
		reg[k++]=arr[start2++];
	for(k=start;k<=end;k++)
		arr[k]=reg[k];
}
void merge_sort(int arr[],const int len){
   
	int reg[len];
	merge_sort_recursive(arr,reg,0,len-1);
}
void swap(int *x, int *y) {
   //快速排序
    int t = *x;
    *x = *y;
    *y = t;
}
void quick_sort_recursive(int arr[], int start, int end) {
   
    if (start >= end)
        return;
    int mid = arr[end];
    int left = start, right = end - 1;
    while (left < right) {
   
        while (arr[left] < mid && left < right)
            left++;
        while (arr[right] >= mid && left < right)
            right--;
        swap(&arr[left], &arr[right]);
    }
    if (arr[left] >= arr[end])
        swap(&arr[left], &arr[end]);
    else
        left++;
    if (left)
        quick_sort_recursive(arr, start, left - 1);
    quick_sort_recursive(arr, left + 1, end);
}
void quick_sort(int arr[], int len) {
   
    quick_sort_recursive(arr, 0, len - 1);
}