請高手講解c 中的桶排序,思路是怎樣的,實現又是怎樣的?

時間 2021-06-08 14:32:04

1樓:

你有好多數字要排序,已知它們都在 0 到 99 之間。

簡單的就是計數排序,也就是數個數。把整個陣列過一遍,數了一下發現 0 有 a 個,1 有 b 個,2 有 c 個……,99 有 z 個。最後就連續返回 a 個 0、b 個 1、c 個 2、……、z 個 99,這就是排序結果。

直接計數的話會有一些問題,比如說數字範圍很大,就可能發現記不過來(要記下個數花費的空間太大)。這時就可以按範圍計數,比方說數字一位一位分組排序。

從理解演算法角度來說從高位到低位分組最好理解。你數了一下不到 10 的數有幾個,十幾的數有幾個,……,九十幾的數有幾個。然後把數字按十位從小到大分成了 10 組。

然後每組內部再做一遍排序(遞迴),最後輸出即可。當然,範圍大了,可能要分組遞迴很多次。

2樓:Moxos Yuri

a =然後建乙個陣列b,令b[a[i] - 1]=a[i],也就是說對於a[1]=3, b[3 -1] = b[2] = a[1] = 3,遍歷一遍之後就是

b =一種把item value和index value聯絡起來的演算法。

姬明超給出的例子中對b的index有乙個計算,如果a中的最大值超過b的長度的話需要這麼做。

c 中入門排序方法有什麼,桶排序好用嗎

邱昊宇 最好入門的其實是隨機排序,核心演算法就是瞎 JB 試。std mt19937 rng while std is sorted std begin arr std end arr 當然簡單是簡單,但是可能做很多無用功,改進一下就是排列排序 有調理地試。while std next permut...

日語 的用法。我是初級。 請大神講解?

光醬 這是 比較常見的用法之一,常見的句型為 時間名詞 動詞 用於表示動作發生的時間,如我們經常說的 私 毎日8時 起 就是用於表現時間的,這裡和大家做個延伸,我們也可以用 或來表示時間。本身是表達程度的詞,用法相對來說比較廣,可以用於表達數量。如果用於表示時間,它更多時候用來表示時間的大約長度,也...

求高手幫我分清求 和 和 的區別,最好用例句講解(比如怎麼接續,意思的差異)。

麥爺 1.以下這兩個意思接近意境不同,換過來用的話也可以不過這個組合更好一點 1時間 1000円徴収 每個小時會被收取1000yen 1時間 1000円 每個小時花費1000yen 2.以下2個意思一樣 生徒5人 先生1人 配置 配置是每5個學徒1個老師 生徒5人 先生1人 配置 3.以下2個意思一...