Swift-桶排序

桶排序(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>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容