桶排序(Bucket sort)原理是將數組分到有限數量的桶里,然后
尋訪序列,并且把項目一個一個放到對應的桶子去,對每個不是空的桶子進行排序,最終將所有的桶合并.
核心代碼:
<pre><code>` func sort(arr:inout [Int],min:Int,max:Int,gap:Int) {
var bucketlist:[[Int]] = []
let bucketCount:Int = (max - min) / gap + 1
// 建桶
for _ in 0..<bucketCount {
let temp:[Int] = []
bucketlist.append(temp)
}
// 分桶
for i in 0..<arr.count {
let index:Int = (arr[i] - min) / gap
bucketlist[index].append(arr[i])
}
// 小桶排序
for i in 0..<bucketCount {
if bucketlist[i].count > 0 {
buketInnerSort(arr: &bucketlist[i])
}
}
var index:Int = 0
for i in 0..<bucketCount {
var bucket:[Int] = bucketlist[i]
if bucket.count > 0 {
for j in 0..<bucket.count {
arr[index] = bucket[j]
index += 1
}
}
}
}
private func buketInnerSort(arr:inout [Int]) {
let count:Int = arr.count
for i in 1..<count {
for j in (1...i).reversed() {
if arr[j] < arr[j-1] {
swap(&arr[j], &arr[j-1])
}
}
}
}`</code></pre>
測試代碼:
<pre><code>let bucketSort:BucketSort = BucketSort() var arr:[Int] = [-10, -9, -20, 29, 25, 3, 49, 9, 37, 21, 43] bucketSort.sort(arr: &arr, min: -20, max: 50, gap: 10) print("FlyElephant--桶排序---\(arr)")
</code></pre>