递归排序的原理
快速排序是找出一个元素作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他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)
}