快速排序

2018-08-04  本文已影响25人  child_cool

基本概念
快速排序(QuickSort)是C. A. R. Hoare在1962年提出对冒泡排序的一种改进.

基本思想

为什么说是对冒泡排序的一种改进?

理念动效图

image.png

实现

func quickSort(_ data:[Int]) -> [Int]{
        
        /// 如果数列数列小于等于1
        if data.count<=1 {
            return data
        }
        
        // 提供左右空间
        var left:[Int] = []
        var right:[Int] = []
        
        // 以数列最后一个值为基准
        let pivot:Int = data[data.count-1]
        
        for index in 0..<data.count-1 {
            if data[index] < pivot {
                left.append(data[index])
            }else{
                right.append(data[index])
            }
        }
        
        /// 获取基准左边新数列
        var result = quickSort(left)
        
        /// 添加基准
        result.append(pivot)
        
        /// 添加基准右边的新数列
        let rightResult = quickSort(right)
        result.append(contentsOf: rightResult)
        
        return result
    }
func quickSort(_ array: [Int]) -> [Int] {
        var newArray = array
        quickSort(&newArray, low: 0, high: newArray.count - 1)
        return newArray
    }
    
    
    func partition(_ array:inout [Int],low:Int,high:Int) -> Int {
        /// 通过位置交换达到分区的效果,不需要占用额外得空间
        let root = array[high]
        var index = low
        
        for i in low...high {
            if array[i] < root {
                if i != index {
                    array.swapAt(i, index)
                }
                index = index+1
            }
        }
        
        if high != index {
            array.swapAt(high, index)
        }
        
        return index
    }
    
    func quickSort(_ array:inout [Int], low:Int, high:Int){
        if low > high {
            return
        }
        /// 进行分区
        let sortIndex = partition(&array, low: low, high: high)
        /// 低位排列
        quickSort(&array, low: low, high: sortIndex-1)
        /// 高位排列
        quickSort(&array, low: sortIndex+1, high: high)
    }
上一篇下一篇

猜你喜欢

热点阅读