一个计算过程,解决问题的方法。
用来评估算法运行效率的
用来评估算法内存占用大小的式子
列表每两个相邻的数,如果前边的比后边的大,那么就交换这两个数的位置。每圈的次数里少排一个。
#### 冒泡排序 (************************)
### 时间复杂度:O(n^2)
###圈数:元素个数-1 次数:元素个数-1-圈数索引
def Bubble_sort(li):
for i in range(len(li)-1):
for j in range(len(li)-1-i):
if li[j] > li[j+1]:
li[j], li[j+1] = li[j+1], li[j]
#### 选择排序 #### 时间复杂度:O(n^2) def select_sort(li): for i in range(len(li)): minLoc = i ###i = 0 for j in range(i+1, len(li)): if li[j] < li[minLoc]: li[j], li[minLoc] = li[minLoc], li[j]
插入到有序区时会与有序区每个元素比较大的方后面位置
##### 插入排序
#### 时间复杂度: O(n^2)
def insert_sort(li):
for i in range(1, len(li)):
tmp = li[i]
j = i - 1
while j >=0 and li[j] > tmp:
li[j+1] = li[j]
j = j - 1
li[j+1] = tmp
取一个元素,从右往左元素依次比较大的放右边不动,小的放左边。哪边空出来位置就从对边取值比较补位。当左边和右边的索引相同时就把取出的元素补上。
def partition(li, left, right): tmp = li[left] while left < right: # 左边 while left < right and li[right] >= tmp: right = right - 1 li[left] = li[right] # 右边 while left < right and li[left] <= tmp: left = left + 1 li[right] = li[left] # 右边和左边相同时补位 li[left] = tmp return left #### 快速排序 #### 时间复杂度:O(nlogn) def quick_sort(li, left, right): if left < right: mid = partition(li, left, right) quick_sort(li, left, mid-1) quick_sort(li, mid+1, right) # 调用 quick_sort(li, 0, len(li)-1)
原文:https://www.cnblogs.com/tfzz/p/12093514.html