n*logn的排序算法
快排
#include<bits/stdc++.h> using namespace std; int n,a[100005]; void q_sort(int l,int r) { if(l>=r) return; int mid,i=l,j=r; mid=a[(l+r)/2]; while(i<=j) { if(l>=r) return; while(a[i]<mid) i++; while(a[j]>mid) j--; if(i<=j) { swap(a[i],a[j]); i++;j--; } } q_sort(l,j); q_sort(i,r); } int main() { cin>>n; for(int i=1;i<=n;++i) scanf("%d",a+i); q_sort(1,n); for(int i=1;i<=n;i++) printf("%d ",a[i]); return 0; }
归并
#include<iostream> using namespace std; int a[100005],b[100005]; void m_sort(int l,int r) { int mid,i,j,k; if(l==r)return; mid=(l+r)/2; m_sort(l,mid); m_sort(mid+1,r); i=l;j=mid+1;k=l; while(i<=mid && j<=r) { if(a[i]<a[j]) { b[k]=a[i];i++;k++; } else { b[k]=a[j];j++;k++; } } while(i<=mid) { b[k]=a[i];i++;k++; } while(j<=r) { b[k]=a[j];j++;k++; } for(i=l;i<=r;i++) a[i]=b[i]; } int main() { int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; m_sort(1,n); for(int i=1;i<=n;i++) cout<<a[i]<<" "; return 0; }