简单排序篇
列表排序的简单排序有三种,分别是冒泡排序、选择排序和插入排序。
这里我们来讨论选择排序:
选择排序
在学习过冒泡排序后,我们对于列表排序就有了一定的认识和思路。
选择排序就是不断的从列表无序区域内中找到最小的元素(或最大的元素),将其放置在有序区域,直到无序区域为空时,我们就得到了一个有序(升序或降序)的新列表。
其实现代码如下:
#选择排序
def select_sort(list):
list_new=[] #创建新列表作为有序区域
for i in range(len(list)): #第i趟选择
min_val=min(list) #min函数找到列表中最小元素
list_new.append(min_val) #将最小元素添加到有序区域
list.remove(min_val) #将最小元素从无需区域中删除
return list_new
li=[10,1,5,12,11,3,8,6,4,2,7]
print(select_sort(li))
运行结果如下:
[1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12]
以上便完成了一个简单的选择排序,但这时我们又发现上面代码中创建了一个新的列表,同时也使用了python自带的列表相关的函数,这使得代码运行占用的空间资源翻倍,那我们能不能在原列表的基础上进行选择排序呢?答案是肯定的,改进后的代码如下:
#选择排序-改
def select_sort(list):
for i in range(len(list)-1):
mid=i
for j in range(i+1,len(list)):
if list[j]<list[mid]:
mid=j
if mid !=i:
list[mid],list[i]=list[i],list[mid]
li=[10,1,5,9,11,3,8,6,4,12,2,15]
select_sort(li)
print(li)
运行结果如下:
[1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 15]
改进后的选择排序使用了两层for循环在原列表上进行了选择排序,此时时间复杂度为O(n²)
提示:下一篇为简单排序篇——插入排序