Swift递归排序

递归排序的原理

快速排序是找出一个元素作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。

所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

 //MARK:- 递归排序(升序排序)
    func sortArrayAscend(array:[Int],startIndex:Int,endIndex:Int) -> [Int] {
        var temp = 0, arr = array
        var i = startIndex, j = endIndex
        //如果结束位置与开始位置相同,即排序完毕
        if i == j {
            return arr
        }
        //以传入的开始位置元素为基准,从后往前比较,只要比基准小就交换位置,一直比较到开始位置
        while i < j {
            if arr[i] < arr[j] {
                j -= 1
            }else {
                temp = arr[i]
                arr[i] = arr[j]
                arr[j] = temp
            }
        }
        //令开始位置后移,循环调用自身
        return sortArrayAscend(array: arr, startIndex: startIndex+1, endIndex: endIndex)
    }

推荐阅读更多精彩内容