快速排序

快排序的基本思想

快排序(Quick Sort)是一种分治的排序算法。

  • 首先从待排序对象中选出一个基准对象(Pivot), 通常取第一个对象;
  • 然后调整所有待排序对象,将基准对象放置到某个特定的位置,使基准对象左边的所有对象的关键字都小于等于基准对象的关键字,使基准对象右边的所有对象的关键字都大于等于基准对象的关键字;
  • 最后把基准对象左边的那些对象与基准对象右边的那些对象分别看做两个独立的序列,再对这两个序列分别(递归调用快排序算法)排序。
extension Array where Element: Comparable {
    mutating func partition(left: Index, right: Index) -> Index {
        var i = left + 1
        var j = right
        let pivot = self[left]
        while true {
            // scan right
            while left < j {
                if self[j] > pivot {
                    j -= 1
                } else {
                    break
                }
            }
            
            // scan left
            while i < right {
                if self[i] < pivot {
                    i += 1
                } else {
                    break
                }
            }
            
            if i >= j {
                break
            }
            exchange(i, j: j)
        }
        exchange(left, j: j)
        return j
    }
    mutating func quickSort() {
        quickSort(left: 0, right: count - 1)
    }
    mutating func quickSort(left: Index, right: Index) {
        if left >= right {
            return
        }
        let partitionIndex = partition(left: left, right: right)
        quickSort(left: left, right: partitionIndex - 1)
        quickSort(left: partitionIndex + 1, right: right)
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容