快速排序:首先任意选取一个数据(通常选用数组的第一个参数)作为关键数据,然后将比它小的数放在它前面,比它大的数放在后面,这个过程称之为快速排序
def quick_sort(l): if len(l) <= 1: return l left = [] right = [] base=l.pop() for x in l: if x <base: left.append() else: right.append() return quick_sort(left)+[base]+quick_sort(right)
七行代码实现快速排序
def quick_sort(l): if len(l) <= 1: return l base = l[0] left = [x for x in l[1:] if x < base] right = [x for x in l[1:] if x >= base] return kuaisu_sort(left) + [base] + kuaisu_sort(right)
l = [5,8,6,3,55,9]
print(quick_sort(l))
冒泡排序:直观的意思就是气泡越大冒的越快
间接的说就是响铃的两个数字先进行比较,如果两个数字的顺序不对,就进行调换
def func(ll):
num = len(ll) # num = 6
for i in range(num): # 取出每一个元素
for j in range(0, num - i - 1):
if ll[j] > ll[j + 1]:
ll[j], ll[j + 1] = ll[j + 1], ll[j]
ll = [5, 45, 65, 95, 3, 521]
func(ll)
print(ll)
6行代码实现冒泡排序
def bubble_sort(l): # 外层循环 for i in range(len(l)-1): # 内层比较循环,j为索引 for j in range(len(l)-i -1): if l[j]>l[j+1]: l[j],l[j+1]=l[j+1],l[j] return l
二分查找:将n个元素分层大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2]则找到x,算法中止,如果x<a[n/2],则只要在数组a的左半部分继续搜索x,,如果x>a[n/2],则只要在数组a的右半部搜索x.
代码如下:
def find(l,aim,start = 0,end = None): end = len(l) if end is None else end mid_index = (end - start)//2 + start if start <= end: if l[mid_index] < aim: return find(l,aim,start =mid_index+1,end=end) elif l[mid_index] > aim: return find(l, aim, start=start, end=mid_index-1) else: return mid_index else: return '找不到这个值' ret= find(l,44) print(ret)
注:二分查找算法 必须处理有序的列表