快速排序
def quick_sort(li,left,right):
if left<right:
mid=partition(li,left,right) #首先给li中最左边的元素归位,返回归位后元素的索引
quick_sort(li,left,mid-1) #接着给归位了的元素左边的,左端列表的,最左侧元素进行归位
quick_sort(li,mid+1,right) #给归位了的元素的右边的,右端列表的,最左侧元素进行归位
def partition(li,left,right):
tmp=li[left]
while left<right:
#从右边找比tmp小的
while left<right and li[right]>=tmp: #当右边比tmp大时,一直找,直到找到比tmp小的数
right-=1
li[left]=li[right] #当找到了比tmp小的数就把右边的值赋值给左边
#从左边找比tmp大的
while left<right and li[left]<=tmp: #当左边的数比tmp小时,一直找,直到找到比tmp大的数
left+=1
li[right]=li[left] #当找到了比tmp大的数,把左边的大数,赋值给右边
li[left]=tmp
return left
import random
l=list(range(0,13))
random.shuffle(l)
quick_sort(l,0,len(l)-1)
print(l)
时间复杂度:
最优:O(n)
最差:O(n^2)
时间复杂度:O(nlogn)
二分查找
def binary_search(alist,item):
"""二分查找---递归实现"""
n = len(alist)
if n > 0:
mid = n//2
if item == alist[mid] :
return True
elif item < alist[mid]:
return binary_search(alist[:mid],item)
elif item> alist[mid]:
return binary_search(alist[mid+1:], item)
else:
return '没有您要查找的元素'
else :
return False
print(binary_search([12,3,4,5,5,6],333))
冒泡查找
def bubble_sort(li):
for i in range(len(li) - 1):
for j in range(len(li) - i - 1):
if li[j] > li[j + 1]:
# 交换两个变量的值,'='右边其实是一个元组(Tuple)
li[j], li[j + 1] = li[j + 1], li[j]
li = [4, 6, 2, 7, 1, 9, 0]
bubble_sort(li)
print(li)