普通大学牲
欢迎指出错误
#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 版权协议,转载请附上原文出处链接和本声明。