每日算法— 选择排序

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]))



【每日算法】— 选择排序