swift算法之排序:(二)选择排序

1、概述

选择排序是一种简单直观的排序,其原理是每次从待排序的数据元素中选出最小/最大的一个元素,存放到序列的起始位置,然后再从剩余的元素中继续寻找最小/最大元素,放到已排序元素的末尾,以此类推,知道全部待排序元素排序完成。

选择排序是不稳定排序

2、算法原理

思想:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录做交换

步骤:

     1、在未排序的序列中找到最小/大的元素,存放到排序序列的起始位置,

     2、然后再继续从剩余未排序的元素中继续寻找最小/大元素,放到已排序序列的末尾,

     3、以此类推,知道所有元素均排序

3、举例

对 [6, 4, 9, 7, 5]排序

第一趟:找出4是最小,将4与6交换,使4放到最前面

第二趟:找到5最小,5与6交换,使5放到已排序的末尾

第三趟:找到6最小,6与9交换,使6放到已排序的末尾

第四趟:7 和 9是已经排好序的,不需要交换,到此,排序完成

4、算法实现

func chooseSort(_ array : [Int])->[Int]{
        var list = array
        var count = 0
        for i in 0..<list.count {
            //记录当前最小的数,比较i+1后更大的数进行记录
            var min = i
            count = i
            for j in i+1..<list.count{
                if list[j]<list[min]{
                    min = j
                }
            }
            list.swapAt(i, min)
        }
        print(list)
        print("count: ",count)
         return list
    }


调用:

let array2 = [8, 5, 2, 6, 9, 3, 1, 4, 0, 7]
SortSummary.chooseSort(array2)

运行结果:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
count:  9

5、时间复杂度

无论最好还是最坏情况下,比较次数都是n*(n-1)/2,即 O(n^2)

 

github代码

注:排序的具体实现代码在 SortSummary.swift 文件里 调用是在 ViewController.swift

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值