十大排序演算法 桶排序(C語言)

2021-10-06 06:35:43 字數 1259 閱讀 1735

桶排序 (bucket sort)或所謂的箱排序,是乙個排序演算法,工作的原理是將陣列分到有限數量的桶子裡。每個桶子再個別排序(有可能再使用別的排序演算法或是以遞迴方式繼續使用桶排序進行排序)。

把待排序序列中的資料根據函式對映方法分配到若干個桶中,在分別對各個桶進行排序,最後依次按順序取出桶中的資料。

適用於資料分配均勻,資料比較大,相對集中的情況。

對映函式要根據資料情況合理的適用,最好可以達到每個桶中只有乙個元素,使得時間複雜度最優,但是空間複雜度太高。

假設資料都為3位的正整數,那麼對應的對映函式可以為f(x)=x/100.即把百位相同的數劃到同一資料塊;

假設資料為2和3位的正整數,那麼對應的對映函式可以為f(x)=x/100.即把百位相同的數劃到同一資料塊;

如下圖:

#include

#include

/* struct node *next:煉表裡用於指向下乙個節點的指標,也就是指向下乙個(節點)結構型別的指標。

struct node {} 是一種結構,有兩個成員,乙個成員是 int 資料,另乙個是指向下乙個 node 結構的指標。 */

typedef

struct node keynode;

void

bucket_sort

(int a,

int size,

int bucket_size)

for(j =

0;j < size;j++

)else

node->next = p->next;

p->next = node;

(bucket_num[index]

->num)++;

}}//列印結果

keynode * k =

null

;//定義乙個空的結構體指標用於儲存輸出結果

for(i =

0;i < bucket_size;i++)}

printf

("\n");

}int

main()

;int size =

sizeof

(a)/

sizeof

(int);

//計算陣列長度

bucket_sort

(a,size,10)

;system

("pause");

//防止控制台閃退

}

十大排序演算法之桶排序(BucketSort)

一 前言 資料結構與演算法,順便刷leetcode,無意間發現了乙個 我覺得講解的比較好的網頁,並且會拿leetcode裡面的題目當做例題,如有需要,奉上 五分鐘學演算法 二 演算法實現的步驟 有限個數字m,每個數字的大小都在1與n之間,則我們可以假設有n個桶,遍歷m個數字,將其存入對應的桶中 如數...

十大排序演算法 桶排序 python版

把陣列a劃分為n個大小相同子區間 桶 每個子區間各自排序,最後合併。桶排序要求資料的分布必須均勻,不然可能會失效。計數排序是桶排序的一種特殊情況,可以把計數排序當成每個桶裡只有乙個元素的情況 1 設定乙個定量的陣列當作空桶 2 遍歷輸入資料,並且把資料乙個乙個放到對應的桶裡去 3 對每個不是空的桶進...

十大排序演算法(c )

1.氣泡排序 每一輪都從頭開始比較,比較當前數與後一位數,若當前數大於後一位數則進行交換,每一輪都會在末尾得到一位排序正確的數,因此每一輪比較結束,下一輪的比較範圍將縮小 ja j 1 if ischange break 2.插入排序 每一輪將當前數 a i 插入到前面已經排序好的合適位置,因此關鍵...