冒泡排序
平均时间: Θ ( n 2 ) \Theta (n^2) Θ(n2) 最好情况: Θ ( n log n ) \Theta (n\log n) Θ(nlogn)
void bubble_sort(){
for(LL i=1;i<=n-1;i++)
for(LL j=1;j<=n-i;j++){
if(a[j]>a[j+1]){
swap(a[j],a[j+1]);
}
}
}
插入排序
平均时间: Θ ( n 2 ) \Theta (n^2) Θ(n2) 最好情况: Θ ( n log n ) \Theta (n\log n) Θ(nlogn)
void insert_sort(){
for(LL i=1;i<=n;i++)
for(LL j=i;j>0;j--){
if(a[j]<a[j-1]){
swap(a[j],a[j-1]);
}
else break;
}
}
选择排序 - 1
平均时间: Θ ( n 2 ) \Theta (n^2) Θ(n2)
void Select_sort(){
LL mn;
for(LL i=1;i<n;i++){
mn=i;
for(LL j=i+1;j<=n;j++){
if(a[mn]>a[j]){mn=j;}
}
if(mn!=i){
swap(a[i],a[mn]);
}
}
}
选择排序 - 2
平均时间: Θ ( n 2 ) \Theta (n^2) Θ(n2)
void Simple_sort(){
for(LL i=1;i<n;i++)
for(LL j=i+1;j<=n;j++){
if(a[j]<a[i]){
swap(a[i],a[j]);
}
}
}
希尔排序
平均时间: Θ ( n 2 ) \Theta (n^2) Θ(n2) 最好情况: Θ ( n + e ) \Theta (n+e) Θ(n+e)
void Shell_sort(){
LL gap,tmp,len=n,j;
for(gap=len>>1;gap>0;gap>>=1){
for(LL i=gap;i<=len;i++){
tmp=a[i];
for(j=i-gap;j>0&&a[j]>tmp;j-=gap){
a[j+gap]=a[j];
}
a[j+gap]=tmp;
}
}
}
归并排序(待完善)
平均时间: Θ ( n log n ) \Theta (n \log n) Θ(nlogn)
void merge(){
}
void mergesort(LL a[],LL l,LL r){
if(l>=r){return;}
LL mid=(l+r)/2;
mergesort(a,l,mid);
mergesort(a,mid+1,r);
merge(a,l,mid,r);
return;
}
快速排序(TLE on #3,4,5)
平均时间: Θ ( n log n ) \Theta (n \log n) Θ(nlogn) 最坏情况: Θ ( n 2 ) \Theta (n^2) Θ(n2)
void quick_sort(LL a[],LL l,LL r){
LL i,j,t,tmp;
if(l>r){return;}
tmp=a[l];
i=l; j=r;
while(i!=j){
while(a[j]>=tmp&&i<j){j--;}
while(a[i]<=tmp&&i<j){i++;}
if(i<j){
swap(a[i],a[j]);
}
}
a[l]=a[i]; a[i]=tmp;
quick_sort(l,i-1);
quick_sort(i+1,r);
}
完整代码
#include<bits/stdc++.h>
#define inf 0x7fffffff
#define LL long long
#define rs register
#define fastOI ios::sync_with_stdio(0)
#define fo(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)
using namespace std;
LL n,a[10000010];
int main(){
fastOI; cin>>n;
for(LL i=1;i<=n;i++){cin>>a[i];}
sort(a+1,a+n+1); // STL - nlogn
for(LL i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0x0;
}