python 桶的排序

2021-10-01 05:20:44 字數 1699 閱讀 3721

在技術排序中,如果元素的範圍比較(比如 在1到1億之間),如何改造演算法

桶排序(bucket sort): 首先將元素分在不同的桶中,在對每個桶中的元素排序

n 表示預設分成多少桶

乙個桶放 (max_num // n)的數

(var // (max_num // n)得0放到0號桶裡,得1放到1號桶裡

當max_num=10000 => min(var // (max_num // n), n-1) 取最小99的

#!

/usr/bin/env python

# -*

- coding: utf-8-

*-# date: 2017/12/10

import random

#li是列表

def bucket_sort

(li, n=

100, max_num=

10000):

#桶本身就是乙個列表 2倍列表

buckets =[[

]for _ in range

(n)] # 建立桶

for var in li:

#乙個桶放 (max_num // n)的數 (var // (max_num // n)得0放到0號桶裡,得1放到1號桶裡

i =min(var // (max_num // n), n-1) # i 表示var放到幾號桶裡

buckets[i]

.(var) # 把var加到桶裡邊

#[0,

2,4,

1] 保持桶內的順序

for j in range

(len

(buckets[i])-

1,0,

-1):

#j(1)小於前面的元素 1和4比較

if buckets[i]

[j]< buckets[i]

[j-1]:

#交換buckets[i]

[j], buckets[i]

[j-1

]= buckets[i]

[j-1

], buckets[i]

[j]else

:break

sorted_li =

for buc in buckets:

#數加到列表後面

sorted_li.

extend

(buc)

return sorted_li#0-

100 迴圈100個數

桶排序的表現取決於資料的分布,也就是需要對不同資料排序時採取不同的分桶策略

平均情況時間複雜度:o(n+k)

最壞情況的時間複雜度:o(n2k)

空間複雜度:o(nk)

Python實現桶排序

實現範圍為1 m的桶排序 對於陣列a,包含n個整數,值從1到m,我們可以利用一種非常快速的排序,桶排序 bucket sort 建立乙個陣列s,裡面含有m個桶,初始化為0。然後遍歷陣列a,讀入ai時,s ai 增一。所有輸入被讀進後,掃瞄陣列s得出排好序的表。該演算法時間花費o m n 空間上不能原...

python 實現桶排序

桶排序我知道思想,但是一直沒有自己實現過,我今天特地實現了乙個版本,主要思想是分桶,設定每個桶的範圍,然後把數對映到每個桶內,然後每個桶排序後進行合併就行了。class solution def init self super init def bucketsort self,nums,bucket...

python與桶排序

問題提出 將以下資料 6,8,2,3,4,0,9,1,5,1 按從小到達排列。桶排序原理 桶排序也叫計數排序,簡單來說,就是將資料集裡面所有元素按順序列舉出來,然後統計元素出現的次數。最後按順序輸出資料集裡面的元素。排序過程如下 一 初始化桶的大小 把資料集裡面每乙個元素當作乙個桶,由上面問題看出,...