基數排序 無人問津的優秀演算法

2022-03-01 05:12:15 字數 886 閱讀 2929

在這個被stl的sort獨霸的c++世界(畢竟stl的sort太過好用)

似乎所有普通排序演算法都被擠到了一邊,但畢竟各有各的優點

這個排序演算法還是不錯的

但最近學習字尾陣列的時候遇到了這個演算法,就簡單學習一下吧

多關鍵字排序中有兩種方法:最高位優先法(msd)和最低位優先法(lsd)

這裡主要介紹最低位優先法

簡略概述:基數排序是通過「分配」和「收集」過程來實現排序

開幾個桶

選取關鍵字最弱還是小?的(數排序的話就是按照進製位從低到高)

從上一次記錄的桶中按照順序依次列舉————收集

重新放入新的桶種————分配

至於為何是正確的,顯然、、

自己可以動手嘩啦嘩啦,這裡就不貼圖了

這樣的複雜度是o(n*關鍵字個數)

也就是說關鍵字越少,複雜度越低

當關鍵字很少的時候可以達到o(n)的級別(參見字尾陣列)

如果只有乙個關鍵字的話,那就成了桶排了

所以這可以說是桶排的改進版,確切說桶排屬於基數排序的一種

luogu p1177 【模板】快速排序

關鍵字可以選擇為(2~~10)個,不過我寫的stl常數有點大?,理論o(n)跑的和stl的sort差不多快,記憶體也o(n)

不過還是很優秀的,**也很簡單(基數:為何沒人用我?)

#include #define for(i,a,b) for(int i=a;i<=b;++i)

const int maxn=1e6+7;

using namespace std;

int a[maxn],n;

vectort[100000][2];

int read()

int main()

基數排序演算法

include stdafx.h include iostream include math.h using namespace std struct radixsort 建立迴圈鍊錶 radixsort creatlink else le ls ls new radixsort 為下乙個節點在堆記...

基數排序演算法

以下內容為程式 int quicksort int p,int n extern int insertsort int p,int n static int partition int p,int n,int m static int quick sort int p,int n 快速排序演算法在 ...

基數排序演算法

經典排序演算法 基數排序radix sort 原理類似桶排序,這裡總是需要10個桶,多次使用 首先以個位數的值進行裝桶,即個位數為1則放入1號桶,為9則放入9號桶,暫時忽視十位數 例如 待排序陣列 62,14,59,88,16 簡單點五個數字 分配10個桶,桶編號為0 9,以個位數數字為桶編號依次入...