美文网首页
swift排序

swift排序

作者: 前年的邂逅_Jerry | 来源:发表于2019-10-23 18:01 被阅读0次

1、冒泡排序

    /// 冒泡排序 从小到大
    func bubbleSort(_ arr : [Int]) -> [Int] {
        var arr = arr
        for i in 0 ..< arr.count{
            for j in 0 ..< arr.count - i - 1{
                if arr[j] > arr[j + 1]{
                    (arr[j] , arr[j + 1]) = (arr[j + 1] , arr[j])
                }
            }
        }
        return arr
    }

2、选择排序

    func selectSort(_ arr : [Int]) -> [Int] {
        var arr = arr
        for i in 0 ..< arr.count{
            var minIndex = i
            for j in i ..< arr.count{
                if arr[j] < arr[minIndex]{
                    minIndex = j
                }
            }
            (arr[i] , arr[minIndex]) = (arr[minIndex] , arr[i])
        }
        return arr
    }

3、插入排序

func sertSort(_ arr : [Int]) -> [Int]{
        var arr = arr
        for i in 1 ..< arr.count{
            var j = i
            while arr[j] < arr[j - 1]{
                (arr[j] , arr[j - 1]) = (arr[j - 1] , arr[j])
                j = j - 1
                if j == 0{
                    break
                }
            }
        }
        return arr
    }

4、希尔排序

    func shellSort(_ arr:  [Int]) -> [Int]{
        var arr = arr
        var gap = arr.count / 2
        while gap >= 1{
            for i in 0..<arr.count {
                var j = i
                while j >= 0 , j + gap < arr.count, arr[j] > arr[j + gap]{
                    (arr[j + gap] , arr[j]) = (arr[j] , arr[j + gap])
                    j -= gap
                }
            }
            gap /= 2
        }
        return arr
    }

5、快排

    func quickSort(_ list : inout [Int], low : Int , high : Int){
        if low >= high{
            return
        }
        var i = low,j = high
        let temp = list[low]
        while i < j{
            while i < j , list[j] >= temp{
                j -= 1
            }
            list[i] = list[j]
            while i < j , list[i] <= temp {
                i += 1
            }
            list[j] = list[i]
        }
        let position = i
        list[position] = temp
        quickSort(&list, low: low, high: position - 1)
        quickSort(&list, low: position + 1, high: high)
    }

6、归并排序

    func mergeSort(_ arr : inout [Int],low:Int,high : Int) {
        guard low < high else {
            return
        }
        let mid = (low + high) / 2
        mergeSort(&arr , low: low,high: mid)
        mergeSort(&arr, low: mid + 1, high: high)
        mergeSort(&arr,low: low,high: high,mid: mid)
    }
    func mergeSort(_ arr : inout [Int],low:Int,high : Int,mid : Int) {
        print("low = \(low) ; high = \(high)")
        var helper = Array(repeating: 0, count: arr.count)
        for i in 0 ..< arr.count {
            helper[i] = arr[i]
        }
        var left = low
        var right = mid + 1
        var current = low
        while left <= mid , right <= high {
            if(helper[left] < helper[right]){
                arr[current] = helper[left]
                left += 1
            }else{
                arr[current] = helper[right]
                right += 1
            }
            current += 1
        }
        //处理左边剩下的元素
        let leftLast = mid - left
        if( leftLast >= 0){
            for i in left ... mid{
                arr[current] = helper[i]
                current += 1
            }
        }
    }
    var array = [24,22,21,37,35,34,2, 5, 8, 9, 10, 4, 3, 16, 1, 7, 8,12,11,65,34,67,68,69,41];
    mergeSort(&array,low: 0,high: array.count - 1)
    print(array)

相关文章

网友评论

      本文标题:swift排序

      本文链接:https://www.haomeiwen.com/subject/nowkvctx.html