Microsoft의 빌 게이츠가 고안한 정렬 알고리즘. 반전 기반으로 설계되어 있고, 수행 시간이 생각보다 많이 걸린다. 효율적인 알고리즘이라 보기는 좀...
extension Array where Element : Comparable {
mutating func flip(_ first: Self.Index, _ end: Self.Index) -> Self {
var f = first
var e = end
while f <= e {
(self[f], self[e]) = (self[e], self[f])
formIndex(after: &f) // f = f + 1
formIndex(before: &e) // e = e - 1
}
return self
}
func maxIndex(to lastIndex: Self.Index) -> Self.Index {
var result = startIndex
for i in 0 ... lastIndex {
if self[i] > self[result] {
result = i
}
}
return result
}
mutating func pancakeSort() -> Self {
var curr = self.count - 1
while curr >= 0 {
let mi = maxIndex(to: curr)
flip(0, mi)
flip(0, curr)
curr -= 1
}
return self
}
}
//a.maxIndex(to: 4)
var a = [1, 3, 5, 7, 2, 4, 6, 8]
a.pancakeSort()