Swift.快速排序

cubegao 2015-05-22 PM 362℃ 0条
import Foundation

class QuickSortSolution {
    func sort(_ n: [Int]) -> [Int] {
        var s = n
        quickSort(&s, 0, n.count - 1)
        return s
        
    }
    
    func quickSort(_ n: inout [Int],_ left: Int,_ right: Int) {
        if left < right {
            let mid = partition(&n, left, right)
            quickSort(&n, left, mid - 1)
            quickSort(&n, mid + 1, right)
        }
    }
    
    func partition(_ n: inout [Int],_ left1: Int,_ right1: Int) -> Int {
        let temp = n[left1]
        var left = left1
        var right = right1
        
        
        while left < right {
            while left < right && n[right] >= temp   {
                right -= 1
            }
            n[left] = n[right]
            
            while left < right && n[left] <= temp{
                left += 1
            }
            n[right] = n[left]
        }
        
        n[left] = temp
        
        return left
    }
}

算法思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

github地址:https://github.com/cubegao/LeetCode

标签: 算法

非特殊说明,本博所有文章均为博主原创。

评论啦~