美文网首页
swift冒泡 选择 插入 排序算法

swift冒泡 选择 插入 排序算法

作者: gerrywanggang | 来源:发表于2021-09-11 19:34 被阅读0次
    import UIKit
    
    let a: [Int] = [4, 5, 2, 3 , 1]
    /// 冒泡排序算法
    /// 基本思想,每次冒泡选出和排好一个排在最后的元素。
    /// 每次冒泡,选出一个排在数组最后一个元素的做法。
    /// 每次都从整个数组的第一个元素开始取,然后跟后面一个元素进行比较和交换。
    /// 然后再取第一个元素和后面的元素比较和交换,一直比较和交换到未排序部分的最后一个元素。
    /// 共需要n-1次冒泡,就完成了排序
    /// - Parameter list: 原始数组
    /// - Returns: 排序后数组
    func bubbleSort(list: [Int]) -> [Int] {
        var sortedList = list
        
        for i in stride(from: 1, to: list.count, by: 1) {
            for j in stride(from: 0, to: list.count - i , by: 1) {
                if sortedList[j] > sortedList[j + 1] {
                    let temp = sortedList[j]
                    sortedList[j ] = sortedList[j + 1]
                    sortedList[j + 1] = temp
                }
            }
            print(sortedList)
        }
        return sortedList
    }
    
    //print("bubble \(bubbleSort(list: a))")
    
    /// 选择排序算法
    /// 先从整个数组中找出需要排第一个位置的元素,然后交换排在第一个位置。
    /// 具体做法,取出第一个元素,暂存该元素下标位置,认为是最小值,如果后面的元素的元素的比这个更小,那么替换为这个更小的元素的下标。如果下表和第一个元素的下标不同,那么交换钙元素。
    /// 然后下一轮从剩余的数组元素中,再找出排第二个位置的元素交换,依次类推。就完成了排序。
    /// - Parameter list: 原始数组
    /// - Returns: 排序后数组
    func selectionSort(list: [Int]) -> [Int] {
        var sortedList = list
        for i in stride(from: 1, to: list.count, by: 1) {
            var key = i - 1
            for j in stride(from: i, to: list.count, by: 1) {
                if sortedList[key] > sortedList[j] {
                    key = j
                }
            }
            if key != i - 1 {
                let temp = sortedList[i - 1]
                sortedList[i - 1] = sortedList[key]
                sortedList[key] = temp
            }
            print(sortedList)
        }
        return sortedList
    }
    
    //print("select \(selectionSort(list: a))")
    
    
    /// 插入排序算法
    /// 采用一个数据插入有序数组的思想。一个数据插入到一个有序数组,那么可以从队尾依次往前比较,
    /// 如果不符合顺序那么交换位置,交换后再从倒数第二个往前继续比较和交换,以此类推。一直比较和交换到第一个。
    /// 按照如上的原理,可以认为一个无序数组的第一个元素是有序的数组。
    /// 那么从第二个元素开始插入到第一个元素的有序数组中,就完成了第二个元素的排序。
    /// 然后再取第三个元素按照上述原理插入到前面排好序的数组中。一直插入数组的最后一个元素,就完成了排序。
    /// - Parameter list: 原始数组
    /// - Returns: 排序后数组
    func insertionSort(list: [Int]) -> [Int] {
        print(list)
        var sortedList = list
        for i in stride(from: 1, to: list.count, by: 1) {
            for j in stride(from: i, to: 0, by: -1) {
                if sortedList[j - 1] > sortedList[j] {
                    let temp = sortedList[j]
                    sortedList[j] = sortedList[j - 1]
                    sortedList[j - 1] = temp
                } else {
                    break
                }
            }
            print(sortedList)
        }
        return sortedList
    }
    
    print("insert \(insertionSort(list: a))")
    
    

    相关文章

      网友评论

          本文标题:swift冒泡 选择 插入 排序算法

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