普通大学牲   

 欢迎指出错误

#include<iostream>
using namespace std;
void insertsort(int arr[],int begin,int end){//插入排序函数 
	int tmp=0;
	int j=begin;
	for(int i=1;i<=end;i++){
		tmp=arr[i];
		for(j=i-1;j>=0&&arr[j]>tmp;j--){
			arr[j+1]=arr[j];
		}
		arr[j+1]=tmp;
	}
	
}
void midswap(int ar[],int s,int e){//选取中位数函数 
	int m=s+(e-s)/2;
	if(ar[s]>=ar[m]>=ar[e]){
		int tmp=ar[s];
		ar[s]=ar[m];
		ar[m]=tmp;
		
	}
	if(ar[s]<=ar[m]<=ar[e]){
		int tmp=ar[s];
		ar[s]=ar[m];
		ar[m]=tmp;
		
	}
	if(ar[m]>=ar[s]>=ar[e]){
		return;
		
	}
	if(ar[m]<=ar[s]<=ar[e]){
		return;
		
	}
	
	if(ar[s]<=ar[e]<=ar[m]){
		int tmp=ar[s];
		ar[s]=ar[e];
		ar[e]=tmp;
		
	}
	if(ar[s]>=ar[e]>=ar[m]){
		int tmp=ar[s];
		ar[s]=ar[e];
		ar[e]=tmp;
		
	}
	
}
void Quicksort(int* arr,int begin,int end){//优化版快排 
	if(begin>end){
		return;
	}
	int len=end-begin+1;
	if (len>10){
	
	if(begin!=end)
	midswap(arr,begin,end);
	int temp=arr[begin];
	int i=begin;
	int j=end;
	while(i!=j){
	
	
			while(arr[j]>=temp&&i<j){
			j--;
		}
			while(arr[i]<=temp&&i<j){
			i++;
		}
		if(j>i){
			int t=arr[i];
			arr[i]=arr[j];
			arr[j]=t;
		}
	}
	arr[begin]=arr[i];
	arr[i]=temp;
		
	Quicksort(arr,begin,i-1);
	Quicksort(arr,i+1,end);
}
if(len<10){
	insertsort(arr,begin,end);
	
}
}
int main(){
	int n;
	cin>>n;
	int* a=new int[n];
	for(int m=0;m<n;m++)
		cin>>a[m];
	Quicksort(a,0,n-1);
	for(int m=0;m<n;m++)
		cout<<a[m]<<" ";
	delete []a;
}

版权声明:本文为BruceLay原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/BruceLay/article/details/126840000