면책 조항 :이 문서는 블로거 원본입니다은 허용 블로거없이 복제 할 수 없다. https://blog.csdn.net/lin1109221208/article/details/90694110
1. 개요
배열이 정렬 버킷, 버킷하고 / 다른 정렬 알고리즘을 사용하여 반복적으로 버킷 정렬을 계속 사용하는 것이 가능하다는 것을 각각의 개별 주문 제한된 수의 할당 버킷 작동한다.
2, 알고리즘 원리
아이디어 : 각 빈 버킷 정렬 결국 모든 배럴을 병합합니다하지 않습니다를 들어, 버킷의 제한된 수에 할당 된 배열은 다음 순서를 찾아, 버킷에 하나의 항목 하나에 해당하는
1, 내장 통
2 서브 경통
3 선별 통
3, 예를 들어
내지 [1,34,66,90,99,34,56,2,3,47,66,99] 정렬
1) 99 년부터 --- 배럴 가장 큰 구축, 그래서 100 비어 배럴의 설립은 0에 저장됩니다
2) 부품의 키트를 정렬 할 --- 첨자 버킷 1 + 동일한 요소로서, 값은 상기 터브 요소의 수를 나타낸다
3) 버킷 첨자 0의 값보다 큰 제거도 요구되고
(4) 알고리즘
func bucketSort(_ array : [Int], _ max : Int)->[Int]{
var a : [Int] = [Int].init(repeating: 0, count: max)
//1、创建一个空桶,全部存0
for i in 0..<max {
a[i] = 0
}
//2、将数组中的元素作为a的下标存储,如果有相同的,则+1
for num in array {
var index = NSInteger(num)
if a[index] as! NSInteger >= 0{
a[index] = (a[index] as! NSInteger)+1
}else{
a[index] = 0
}
}
//遍历桶,根据下标取出数据并排序
var sort = [Int]()
for i in 0..<a.count {
if a[i] as! NSInteger > 0 {
if a[i] as! NSInteger > 1{
//处理相同数据的情况
for _ in 0..<a[i]{
sort.append(i)
}
}else{
sort.append(i)
}
}
}
return sort
}
调用:
array8 = [1,34,66,90,99,34,56,2,3,47,66,99]
array8 = bucketSort(array8, 100)
运行结果:
[1, 2, 3, 34, 34, 47, 56, 66, 66, 90, 99, 99]
5 시간 복잡도
버킷 정렬 시간 복잡도는 O (N)
참고 : 특정 구현 코드의 종류 SortSummary.swift 호출 파일 ViewController.swift에