10 3基數排序

2021-10-03 03:24:41 字數 1752 閱讀 1622

桶排序

假設有n個學生,它們的成績是0到100之間的整數(於是有m=101個不同的成績值)。如何在線性時間內將學生按成績排序?

void

bucket_sort

(elementtype a,

int n)

}

基數排序

多關鍵字的排序

一副撲克牌是按2種關鍵字排序的

/* 基數排序 - 次位優先 */

/* 假設元素最多有maxdigit個關鍵字,基數全是同樣的radix */

#define maxdigit 4

#define radix 10

/* 桶元素結點 */

typedef

struct node *ptrtonode;

struct node

;/* 桶頭結點 */

struct headnode

;typedef

struct headnode bucket[radix]

;int getdigit (

int x,

int d )

return d;

}void

lsdradixsort

( elementtype a,

int n )

/* 下面開始排序 */

for(d=

1; d<=maxdigit; d++)}

/* 下面是收集的過程 */

list =

null

;for

(di=radix-

1; di>=

0; di--)}

}/* 將list倒入a並釋放空間 */

for(i=

0; i)}

/* 基數排序 - 主位優先 */

/* 假設元素最多有maxdigit個關鍵字,基數全是同樣的radix */

#define maxdigit 4

#define radix 10

/* 桶元素結點 */

typedef

struct node *ptrtonode;

struct node

;/* 桶頭結點 */

struct headnode

;typedef

struct headnode bucket[radix]

;int getdigit (

int x,

int d )

return d;

}void

msd( elementtype a,

int l,

int r,

int d )

/* 下面是分配的過程 */

p = list;

while

(p)/* 下面是收集的過程 */

i = j = l;

/* i, j記錄當前要處理的a的左右端下標 */

for(di=

0; di)/* 遞迴對該桶資料排序, 位數減1 */

msd(a, i, j-

1, d-1)

; i = j;

/* 為下乙個桶對應的a左端 */}}

}void

msdradixsort

( elementtype a,

int n )

排序 基數排序

基數排序 radix sort 是屬於 分配式排序 distribution sort 基數排序法又稱 桶子法 bucket sort 或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些 桶 中,藉以達到排序的作用。排序思想 首先按照資料的最低位 個位 將資料分配到0 9...

排序 基數排序

1 基數排序 桶排序 介紹 1 基數排序 radix sort 屬於 分配式排序 distribution sort 又稱 桶子法 bucket sort 或bin sort,顧名思義,它是通過鍵值的各個位的值,將要排序的元素分配至某些 桶 中,達到排序的作用 2 基數排序法是屬於穩定性的排序,基數...

桶排序 基數排序 計數基數排序 Java

前面已經講述了很多排序演算法,但是他們的排序演算法都是基於兩個值之間的比較,通過決策樹的方法可以證明深度為d的二叉樹則最多有 一些好的排序演算法是可以達到時間複雜度是線性的,桶排序就是其中一種。比如有n個數,但是這些數的最大數不超過m。這個時候就可以定義乙個含有m個元素的陣列 初始值為0 然後遍歷n...