#创作灵感#
来源于最近的数据结构的学习
1.需要我们具备对o()这个时间复杂度具有一定的了解
2.明白遍历以及for循环的使用
好,现在我们步入正题:
何为选择排序(selection sort)?
实质上:
每一次从待排序的数据元素中选出最小中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
这么一听,感觉有点懵懵的。----没关系,我来带着你一条代码一条代码去理解。
来我们先创建一条关于选择函数的函数名
我们来看到这里
第一行是 创建了一条关于(选择函数的函数):def selection_sort(arr):
这里的arr,咱们可以视为广义的数组,因为我并未在此处使用import heap----来创建数组
然后来到第二行---for i in range(len(arr)): 这里遍历了从0到len(arr)范围内的数,len(arr)与数组里面的数据数量有关。为何这样遍历
因为想让i被赋予从0到len(arr)-1 的下标后面好不断更新起始点---咱先往后看。
此处的min_index = i 是为到后面交换遍历后 交换这里面最小数的指针
然后我们接着往下看,来到此处:
对于这一条for循环遍历----我的理解是 这一段不断遍历出最小的那个数才停止。
就是说它要寻找出范围(i+1,len(arr))内最小的那个数,把那个数的下标“j”---重新赋给min_index
的数-----那么我说过python的是一个面向对象的动态语言,所以此时的min_index所指向的是j
然后咱得出了---min_index = j 这个数据之后结束了嵌套中for的循环,执行下一条在外部的for循环的指令----arr[i],arr[min_index] = arr[min_index],arr[i]
这一条指令是交换以min_index为下标的数与以开头(起始值)的下标i的数值,python的数据执行时以右到左。请记好了。swap-交换,这里我就不一一赘述了
最后return arr ----返回调整后的arr,这里大白话就是把那个现在的i下标的数值与那个min_index的下标的数值交换后的数组arr。arr数组这个数据大小并未发生改变,只是进行了交换而已,返回交换后的arr。最后提一个醒,return arr是在for i in range(len(arr)): 之内的,就是它还会被继续使用直到全部排序好后for遍历完arr才结束,而不是直接就返回已经全部排序好的数组arr。
它的时间复杂度是O(N**2):
上面那个图就是其解释
这个便是selection_sort()函数的全部过程
tips:该函数,已经经过本人验证多次,可以运行并且由对数器(下一次我会提到)校对过
如果在写的时候出现错误,请多修正几次。学代码就是不能怕出错。
加油!!!
题外话:本人是一名大一学生,平常有很多东西要学习,所以更新的频率不敢保证。不过还是会尽量抽出时间,给出对咱新人友好的数据解释。感谢你们的支持,也希望我们可以多交流多讨论,谢谢。