算法小专栏:选择排序

Posted QiShare

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法小专栏:选择排序相关的知识,希望对你有一定的参考价值。

算法小专栏:选择排序

本篇将重点介绍选择排序,在讲解选择排序之前,我们先复习一下数组和链表等知识。

一、数组 or 链表?

数组和链表作为常用的存储数据结构,有各自的优势与劣势。

  • 数组的优势在于查询速度快。

  • 链表的优势在于插入与删除速度快。

下面是两者的时间复杂度:

/ 数组 链表
读取 O(1) O(n)
插入 O(n) O(1)
删除 O(n) O(1)

为什么呢? 这与数组与链表的存储方式有关。

数组是顺序存储,而链表是链式存储。

  • 顺序存储:所存储的内存区域是连续的。

  • 链式存储:所存储的内存区域是非连续的。

举个例子:图解一下

算法小专栏:选择排序

因此,当我们所存储的数据经常查询,则选择数组好一些。 如果我们的数据经常被操作,并且数据长度经常发生变化,则选择链表好一些。

关于数组的内存存储还有几个小知识点:

  1. 对于不可变数组来说,每一次重新赋值都是一次内存整体迁移,相当于开辟了一块新内存存储数据。

  2. 对于可变数组来说,系统会预留内存位置,当可变数组的大小超过这个预留内存大小时,会做整体数据迁移,会迁移到一块更大的预留内存位置。

二、选择排序

我们先来看一下选择排序的算法流程:

算法小专栏:选择排序

解释:
1.每一次循环 找到 未排序队列中的最小值的index。(n次)
2.再与前置位交换,未排序队列元素数-1
3.重复n次,得出最终排序队列, 故时间复杂度 = O(n2)

下面是基于 python的实现代码:

  • 每一次循环 找到 未排序队列中的最小值的index。(n次)

     
       
       
     
  1. def findSmallest(arr):

  2. smallest = arr[0]

  3. smallest_index = 0

  4. for i in range(1, len(arr)):

  5. if arr[i] < smallest:

  6. smallest = arr[i]

  7. smallest_index = i

  8. return smallest_index

  • 再与前置位交换,未排序队列元素数-1。(也可以加入新数组)

     
       
       
     
  1. def selectionSort(arr):

  2. newArr = []

  3. for i in range(len(arr)):

  4. smallest = findSmallest(arr)

  5. newArr.append(arr.pop(smallest))

  6. return newArr

  • 完整示例代码:

     
       
       
     
  1. def findSmallest(arr):

  2. smallest = arr[0]

  3. smallest_index = 0

  4. for i in range(1, len(arr)):

  5. if arr[i] < smallest:

  6. smallest = arr[i]

  7. smallest_index = i

  8. return smallest_index


  9. def selectionSort(arr):

  10. newArr = []

  11. for i in range(len(arr)):

  12. smallest = findSmallest(arr)

  13. newArr.append(arr.pop(smallest))

  14. return newArr


  15. print selectionSort([5, 3, 2, 10, 6, 4, 7])

工程源码:https://github.com/QiShare/QiAlgorithms

算法小专栏:选择排序
算法小专栏:选择排序

QiShare是一个ios及周边技术文章分享平台,由奇舞团iOS团队运营。(PS:扫描左图二维码,即可关注QiShare简书。)

——QiShare团队

更多精彩内容,尽在阅读原文

以上是关于算法小专栏:选择排序的主要内容,如果未能解决你的问题,请参考以下文章

《算法零基础100例》(第37例) 基础排序 - 选择排序

在第6731次释放指针后双重免费或损坏

《糊涂算法》之八大排序——选择排序

《算法零基础100讲》(第34讲) 排序入门 - 选择排序

❤️「 选择排序 」❤️

快速排序/快速选择算法