美文网首页力扣精解
数组-选择排序

数组-选择排序

作者: coenen | 来源:发表于2021-08-10 07:35 被阅读0次
采用选择排序方式对数组进行排序

选择排序百科:选择排序(Selection sort)是一种简单直观的排序算法

摘一个示例做个说明.
示例 1:
输入: [0,5,9,3,12,7]
输出: [0,3,5,7,9,12]
算法原理:
  1. 第一次从待排序的数据中选出最小或者最大的一个元素,放在数组的起始位置.然后再从剩下待排序数据中继续寻找相应数据,放到已排序的末尾.直到结束.
  2. 算法演示 选择排序演示.gif
算法分析:
  1. 时间复杂度
    选择排序的交换操作介于 0 和 (n - 1)次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。
  2. 算法稳定性
    选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了。
    综上,选择排序是一种不稳定排序算法.

代码实现-Swift版本:

func selectionSort(nums: inout [Int]){
    var minIndex: Int// 先找最小的进行交换排序
    for i in 0 ..< nums.count - 1 {
        minIndex = i
        for j in i + 1 ..< nums.count{
            // 循环遍历未排序的数据,找出最小值
            if nums[minIndex] > nums[j] {
                minIndex = j
            }
        }
        nums.swapAt(i, minIndex)//交换最小值和当前值
    }
}

测试用例:

var nums = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]

参考:

考察要点:

  • 数组
  • 排序

相关文章

  • 选择排序

    选择排序 调用选择排序 生成数组 打印输出排序数组

  • Java 数组的排序、逆序

    数组的排序、逆序测试数据 数组选择排序 数组冒泡排序 数组逆序

  • 2018-08-25

    数组选择排序

  • 排序算法

    冒泡排序 选择排序 插入排序 归并排序 快速排序 数组内置方法

  • 4.测试算法的性能

    本例中测试选择排序的性能. 用选择排序对一数组进行排序,该数组为长度为10000,每个数组元素的大小是[0,100...

  • 选择排序和冒泡排序

    规则:比较大小,位置交换 选择排序:数组中的每个元素都进行比较 冒泡排序:数组中相邻元素进行比较 选择排序 for...

  • 算法入门-数组之选择排序

    选择排序 选择排序是一种比较直观的排序算法。它通过不断的在未排序的数组中找出最小(大)的数,然后将它放在已排序数组...

  • DAY. 05 冒泡排序,选择排序,杨辉三角

    学了一维数组的3种定义格式,数组的内存,遍历数组,数组的排序冒泡排序和选择排序,数组元素的查找,复制。 以及二维数...

  • 数组-选择排序

    采用选择排序方式对数组进行排序 选择排序百科:选择排序(Selection sort)是一种简单直观的排序算法[h...

  • 排序算法--选择排序

    选择排序基本思想如下: 遍历未排序数组,选出最小值,放在数组开头 在剩余未排序数组中,选出最小值,排在已排序数组的...

网友评论

    本文标题:数组-选择排序

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