堆排序 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849#include <cstdio>#include <iostream>#include <algorithm>using namespace std;int a[1000000];int heap[1000000] ,cnt;int n;/*下标 1 2 3 4 5 | 6 7*/int query(){//查询最大 if(!cnt)return -1; return heap[1]; }void insert(int x){//插入 cnt++; heap[cnt]=x; int k=cnt; while(k!=1 && heap[k] > heap[k/2])swap(heap[k] ,heap[k/2]) ,k=k/2;}void del(int x){//删除 swap(heap[x] ,heap[cnt]); heap[cnt]=0; cnt--; int w=x; while(heap[w*2] > heap[w] || heap[w*2 + 1] > heap[w]){ int aa; if(heap[w*2] > heap[w*2 + 1])aa=w*2; else aa=w*2 + 1; swap(heap[aa] ,heap[w]); w=aa; }} int main(){ cin >> n; for(int i=1 ,w;i<=n;i++){ cin >> w; insert(w); } for(int i=1;i<=n;i++){ a[i]=query(); del(1); } for(int i=n;i>=1;i--)cout << a[i] << ' '; } 快速排序 12345678910111213141516171819202122232425262728293031#include <cstdio>#include <iostream>#include <algorithm>#include <cstdlib>#include <ctime>#include <cmath>using namespace std;long long n;long long a[10000005];void qsort(int l ,int r){ if(l >= r)return ; int key=rand()%(r-l+1) + l; swap(a[key] ,a[l]); int p=l,q=r; while(p < q){ while(a[p] <= a[q] && p<=q)q--; swap(a[q] ,a[p]); while(a[p] < a[q] && p<=q)p++; swap(a[q] ,a[p]); } qsort(l ,p-1); qsort(p+1 ,r);}int main(){ srand(time(0)); cin >> n; for(int i=1;i<=n;i++)cin >> a[i]; qsort(1 ,n); for(int i=1;i<=n;i++)cout << a[i] << ' ';} 归并排序 1234567891011121314151617181920212223242526272829303132333435#include <cstdio>#include <algorithm>#include <iostream>using namespace std;int n ,a[100005];void Mergesort(int l ,int r){ if(l==r)return ; int mid=(l + r) / 2; Mergesort(l,mid); Mergesort(mid + 1 ,r); int p=l ,q=mid + 1, k=l; int tmp[100005]={0}; while(p <= mid && q <= r){ if(a[p] > a[q]){ tmp[k]=a[p]; p++; } else{ tmp[k]=a[q]; q++; } k++; } while(p <= mid)tmp[k++]=a[p] ,p++; while(q <= r)tmp[k++]=a[q] ,q++; for(int i=l;i<=r;i++)a[i]=tmp[i];}int main(){ cin >> n; for(int i=1;i<=n;i++)cin >> a[i]; Mergesort(1 ,n); for(int i=n;i>=1;i--)cout << a[i] << ' ';}