Swift經典排序算法-桶排序法

桶排序

一、基本思路

a、將數組中元素劃分到不同的桶中。先對遍歷數組找到最大值元素(maxNum)和最小值元素(minNum),然後設定用的個數爲x個,然後把【maxNum,minNum】均勻劃分成 x個區間,每個區間就是一個桶。將數組中的元素分配到各相應的桶中;

b、對桶內的元素進行排序,任意選擇一種排序算法;

c、將各個桶中的元素合併成一個大的有序序列(數組);

d、假設數據是均勻分佈的,則每個桶的元素平均個數爲 n/k 。假設選擇用快速排序對每個桶內的元素進行排序,那麼每次排序的時間複雜度爲 O(n/klog(n/k)) 。總的時間複雜度爲O(n)+O(m)O(n/klog(n/k)) = O(n+nlog(n/k)) = O(n+nlogn-nlogk 。所以桶排序的時間複雜度和空間複雜度都爲:O(n+k);當 k 接近於 n 時,桶排序的時間複雜度就可以認爲是 O(n)的。即桶越多,時間效率就越高,而桶越多,空間就越大。

桶排序在什麼時候最快呢?-> 當輸入的數據可以均勻的分配到每一個桶中。

桶排序在什麼時候最慢呢?->當輸入的數據被分配到了同一個桶中。

二、代碼實現
在這裏插入圖片描述

➕關注微信公衆號【瘋狂1024】在這裏插入圖片描述