每日算法— 选择排序
Posted 人类之奴
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日算法— 选择排序相关的知识,希望对你有一定的参考价值。
"本文将介绍最基本的排序算法-选择排序"
在介绍选择排序法之前,我们首先来介绍一下两种数据类型:数组和链表。
数组与链表
上图中第一个数据类型是数组,数组是一个连续的数据序列,它们在内存中也是顺序存储的,所以在声明一个数组时,计算机就在内存空间中为它开辟了一片连续的内存空间,这也导致数组的存在是比较浪费内存的。
第二个数据类型是链表,链表中的一个元素由两部分组成,第一部分存放我们的数据;第二部分存放下一个数据在内存的位置,它是一个指针。
正是由于链表这样结构特点,链表在内存中的存储不必是连续的内存空间,因此链表的存储相对于数组来说更节省内存空间。
数组和链表中的每个元素都必须是相同的数据类型,例如每个元素都是int类型,因此数组和链表中每个元素所占的内存大小是一样的,又因为数组数据是连续存储的,因此我们知道了数组的第一个元素位置时,就能推算出数组中任何一个元素的位置;但链表不具备这样的特点。
数组与链表的搜索方式
数组元素的搜索可以直接用下标法直接检索;而链表元素的搜索则要从头开始搜索,直至搜索到目标元素或遍历完整个链表。
元素插入
数组在进行元素插入时,需要将插入元素位置之前的所有元素都往前挪一个位置;而链表在进行元素插入时,只需要将插入位置前一元素的指针指向插入元素,将插入元素的指针指向插入位置的的后一位;所以执行插入操作时,链表的时间复杂度更小。
元素删除
今天的主角:选择排序算法,需要用到以后的知识点。
算法实现:
选择排序算法的思想就是遍历整个需要进行排序的列表,找到最大值(或最小值),并将其添加至另一新的列表中。
def find_smallest(arr):
smallest=arr[0]
smallest_index=0
for i in range(1,len(arr)):
if arr[i]<smallest:
smallest=arr[i]
smallest_index=i
return smallest_index
def selection_sort(arr):
newarr=[]
for i in range(len(arr)):
smallest=find_smallest(arr)
newarr.append(arr.pop(smallest))
return newarr
print(selection_sort([13,23,2,3,4,5,56,43]))
以上是关于每日算法— 选择排序的主要内容,如果未能解决你的问题,请参考以下文章