排序!——神奇的排序!!
阿新 • • 發佈:2017-08-05
max color code str 般的 pre 二次 pla .com
這是一個有趣的排序方法
我不知道該叫它什麽。。桶排序??!!的確有桶排序的部分吧。
姑且叫它——桶升(升級版的桶排序)
這個算法我是從一個標程上看到的
第一次看的時候看不懂。
第二次看才發現它的奇妙
普通的桶排序滿足不了a[i]>=1e8以上的情況。
可是這個“桶升”卻能滿足a[i]^(1/2)<1e8
並且它的復雜度和桶排一樣是O(n)
我在洛谷上交了這樣一題:【模板】快速排序
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const intView Codemaxn=100010; const int num=32767; int n,a[maxn],nxt[maxn],cnt[num+1]; int get(int x,int k){ if(!k)return x# return (x>>15)# } void rsort(){ for(int k=0;k<=1;k++){ memset(cnt,0,sizeof(cnt)); for(int i=1;i<=n;i++)++cnt[get(a[i],k)]; for(int i=1;i<=num;i++)cnt[i]+=cnt[i-1]; for(int i=n;i;i--)nxt[cnt[get(a[i],k)]--]=a[i]; for(int i=1;i<=n;i++)a[i]=nxt[i]; } } int main() { scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d",&a[i]); rsort(); for(int i=1;i<=n;i++)printf("%d ",a[i]); return0; }
跑得比一般的快得多。
本文由Yzyet編寫,網址為www.cnblogs.com/Yzyet。非Yzyet同意,禁止轉載,侵權者必究。
排序!——神奇的排序!!