Swift - 插入排序

demo下载地址

原理解析

它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

问题描述:

把数组 [61,5,33,44,22] 进行从小到大进行排序

第一种:插入排序通过移动

解题步骤:

 /*
     
     步骤如下:
     * 从第一个元素开始,该元素可以认为已经被排序
     * 取出下一个元素,在已经排序的元素序列中从后向前扫描
     * 如果该元素(已排序)大于新元素,将该元素移到下一位置
     * 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
     * 将新元素插入到该位置后
     * 重复步骤2~5
     */

## 代码:

func p_insertSortMobile(array: inout [Int]) -> [Int] {
        guard array.count > 1 else {
            return array
        }
        for i in 0..<(array.count - 1) {
            if array[i + 1] < array[i] {//小于有序区最大的数值,需要插入有序系列
                let temp = array[i + 1] //保存将要被有序区向后移顶替的值(即本轮插进有序区的值)
                
                var j = i + 1//有序区的序号
                repeat { //数据移动比 temp 大的都往后移
                    
                    j  -= 1
                    array[j + 1] = array[j]
                    
                    
                } while (j - 1 >= 0) && (array[j - 1] > temp) // 还需要移动
                
                // 插入
                array[j] = temp
                
            }
        }
        return array
    }

测试:

 @objc func insertSortMobile() {//插入排序 通过移动
        var list = [61,5,33,44,22]
        let result = p_insertSort(array: &list)
        
        print(result)
        
    }
    

结果

[5, 22, 33, 44, 61]

第一种:插入排序通过交换

代码:

func p_insertSortExchange(array: inout [Int]) -> [Int] {
        guard array.count > 1 else {
            return array
        }
        
        for i in 1..<array.count {
            
            var y = i //从 i 往前栈。符合条件交换
            
            while y > 0 && array[y] < array [y - 1] {
                let temp = array[y]
                array[y] = array[y - 1]
                array[y - 1] = temp
                y -= 1
                
            }
            
        }
        return array
    }

测试:

@objc func insertSortExchange() {//插入排序,通过交换
        
        var list = [61,5,33,44,22]
        let result = p_insertSortExchange(array: &list)
        
        print(result)
    }

结果:

[5, 22, 33, 44, 61]
发布了128 篇原创文章 · 获赞 106 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Z1591090/article/details/102665507