冒泡排序:
若第i位大于第i+1位,则交换,实现较大一位的上浮。
def Bubble_Sort(li):
l = len(li)
for a in range(len(li) - 1):
flag = False
for i in range(len(li) - 1 -a):
if li[i] > li[i + 1] :
li[i], li[i + 1] = li[i + 1], li[i]
flag = True
print(a)
print(li) #打印一下每次交换的结果
if not flag : #如果在某一趟循环中没有发生交换,则证明列表已经排好序了
return li
return li
s = [2, 3, 8, 1, 6, 7]
print(s)
a = Bubble_Sort(s)
print(a)
[2, 3, 8, 1, 6, 7]
0
[2, 3, 1, 6, 7, 8]
1
[2, 1, 3, 6, 7, 8]
2
[1, 2, 3, 6, 7, 8]
3
[1, 2, 3, 6, 7, 8]
[1, 2, 3, 6, 7, 8]
选择排序:
记录最小值的下标,在有序区的最后一位进行交换
def select_sort(li):
for i in range(len(li) - 1):
min_loc = i
for j in range(i+1, len(li)):
if li[min_loc] > li[j] :
min_loc = j
li[i], li[min_loc] = li[min_loc], li[i]
print(i)
print(li)
return li
s = [2, 3, 8, 1, 6, 7]
print(select_sort(s))
0
[1, 3, 8, 2, 6, 7]
1
[1, 2, 8, 3, 6, 7]
2
[1, 2, 3, 8, 6, 7]
3
[1, 2, 3, 6, 8, 7]
4
[1, 2, 3, 6, 7, 8]
[1, 2, 3, 6, 7, 8]
插入排序:
设前i位为有序区,则len()-i位为无序区,将无序区第一位与有序区最大一位比较,若小于最大一位,则与有序区第二大的数比较,直到找到插入位置,有序区增加一位,无序区减少一位。
def insert_sort(li):
for i in range(1, len(li)):
j = i - 1
empty = li[i]
while j >= 0 and li[j] > empty:
li[j + 1] = li[j]
j -= 1
li[j + 1] = empty
print(i)
print(li)
return li
s = [2, 3, 8, 1, 6, 7]
print(insert_sort(s))
1
[2, 3, 8, 1, 6, 7]
2
[2, 3, 8, 1, 6, 7]
3
[1, 2, 3, 8, 6, 7]
4
[1, 2, 3, 6, 8, 7]
5
[1, 2, 3, 6, 7, 8]
[1, 2, 3, 6, 7, 8]
插入排序、冒泡排序、选择排序的时间复杂度都是O(n^2)