基數排序基於多關鍵字排序的思想,即把乙個邏輯關鍵字拆分成多個關鍵字。
基數排序有兩種實現方式:
第一種叫做最高位優先(msd),即先按最高位排成若干子串行,再對每個子串行按次高位排。
第二種叫做最低位優先(lsd),這種方式不必分成子串行,每次排序全體元素都參與。最低位可以優先這樣進行,不通過比較,而是通過「分配」和「收集」。
由於不需要分堆並對每堆單獨排序,lsd方法往往比msd簡單而開銷小。
基數排序適合的場景是序列中的元素很多,但組成元素的關鍵字的取值範圍較小。如果關鍵字的取值範圍也很大,如26個字母,且序列中大多數元素的最高位關鍵字都不相同,那麼這時可以考慮使用「最高位優先法」,先根據最高位排成若干個子串行,然後分別對這些子串行進行直接插入排序。
感覺桶排序與基數排序貌似是一樣的。【待解決】
演算法**為:
寫了好久,歸根結底還是鍊錶、指標的不熟悉造成的,加油!
#include "stdafx.h"
#include using namespace std;
//鍊錶使用功底有待加強!!
struct node
;int getdigit(int num, int loc)
int maxbits(int data, int size)
return max;
}void radixsort(int data, int size)
for(int i = 0; i < size; i++)
}int j=0;//初始化
for(i=0; i < 10; i++)
}for(int i=0;i寫在最後:其實,這些經典的演算法的思想,都是非常熟悉的,但,知道容易動手難,尤其是最後這個基數排序卡了很久,還是多動手吧,無他,唯手熟爾!
參考:
演算法回顧之八 基數排序
演算法回顧系列第八篇 基數排序 基數排序 基本原理 顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用。基數排序的方式可以採用lsd least significant digital 或msd most significant digital lsd的排序方式由...
經典演算法 基數排序
概述 基數排序是一種高效的線性排序演算法。其方法是將資料按位分開,並從資料的最低有效位到最高有效位進行比較,依次排序,從而得到有序資料集合。例子 用基數排序對十進位制資料進行排序。在對個位數排序之後 在對十位數排序之後 有一點非常重要,在對每一位數值進行排序時其排序過程必須是穩定的。程式 inclu...
演算法之基數排序
基數排序思想 利用個十百千等位數數字進行排序,不經過資料之間比較,以下 純手擼,實現起來還是比較簡單的,不過是第一次實現,不追求效率,只求實現。真個實現主要邏輯分為兩步,第一步把原始資料按照位數大小分配到二維陣列中,第二步再把二維陣列中資料按順序取出到原始陣列中,完成一次各位排序 接下來就是迴圈,依...