算法(Algorthm):一个计算过程,解决问题的方法。
时间复杂度是用来估计算法运行时间的一个式子(单位)。
空间复杂度是用来评估算法占用内存大小的一个式子。
(1)列表排序:将无序的列表变成有序列表。
应用场景:各种榜单、各种表单、给二分排序用、给其他算法用
A、冒泡排序
思路:相邻的两个数两两对比,如果前面的数大于后面的数,则把前面的数和后面的交换。每一轮排序,最大的数置于最后。
def bubble_sort(li):
for i in range(len(li) -1):
exchange = False #加个优化
for j in range(len(li) -i -1):
if li[ j ] > li[ j+1 ]:
li[ j ],li [ j+1 ] = li [ j+1 ],li[ j ]
exchange = True #加个优化
if not exchange:
return #加个优化,如果冒泡排序中执行一趟而没有交换,则表示列表已经是有序状态,可以直接结束算法
B、选择排序
思路:一趟遍历记录最小的数,放到第一个位置;再一趟遍历记录剩余列表中最小的数,继续放置。
for select_sort(li):
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 ]
C、插入排序思路
思路:列表被分为有序区和无序区两个部分,最初有序区只有一个元素;每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。
def insert_sort(li):
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