一、排序low B三人组:
冒泡排序
选择排序
插入排序
二、冒泡排序思路
首先,列表每两个相邻的数,如果前边的比后边的大,那么交换这两个数
代码关键点:
趟
无序区
li=[1,9,2,8,3,6,4,5,7]
def bubble_sort(li):
for i in range(len(li)-1):
state=False #如果已经排序好,时间复杂度为O(n),否则为O(n^2)
for x in range(len(li)-i-1):
if li[x]>li[x+1]:
li[x],li[x+1]=li[x+1],li[x]
state=True
if not state:
return
bubble_sort(li)
三、选择排序思路
一趟遍历记录最小的数,放到第一个位置;
再一趟遍历记录剩余列表中最小的数,继续放置;
代码关键点:
无序区
最小数的位置
li = [1, 9, 2, 8, 3, 6, 4, 5, 7]
def select_sort(li): #时间复杂度 O(n^2)
for i in range(len(li)-1):
min_loc=i
for j in range(i+1,len(li)):
if li[j] < li[min_loc]:
min_loc = j
if min_loc !=i:
li[i],li[min_loc] = li[min_loc],li[i]
select_sort(li)
四、插入排序思想
列表被分为有序区和无序区两个部分。最初有序区只有一个元素。
每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。
代码关键点:
摸到的牌
手里的牌
def insert_sort(li): #时间复杂度 O(n^2)
for i in range(1, len(li)):
tmp = li[i]
j = i - 1
while j >= 0 and tmp < li[j]:
li[j + 1] = li[j]
j = j - 1
li[j + 1] = tmp