Algorithm

181 阅读1分钟

1、快速排序

value = [80,82,75,60,100,90,95,88,85,72]

def quick(value):
    # 递归退出条件
    if len(value) < 2:
        return value
    tmp = value[0]
    small = [x for x in value if x < tmp] 
    equal = [x for x in value if x == tmp]
    big = [x for x in value if x > tmp]
    return quick(small) + equal + quick(big) # 从小到大拼接

print(quick(value))

2、插入排序

value = [80,82,75,60,100,90,95,88,85,72]

def insert(value):
    # 外层遍历无序数据,无序从第二个数开始
    for i in range(1,len(value)):
        tmp = value[i]
        index = i
        # 内层遍历有序数据
        for j in range(i-1,-1,-1):
    	    if value[j] > tmp: # 有序数据大于关键数
    	        value[j+1] = value[j] # 有序数据后移
    	        index = j # 关键数下标前移
    	    else:
    	        index = j+1
    	        break
        value[index] = tmp
    return value

print(insert(value))

3、冒泡排序

value = [80,82,75,60,100,90,95,88,85,72]

def sortport(value):
    for i in range(len(value)-1):
        flag = False
        for j in range(len(value)-1-i):
            if value[j] > value[j+1]:
                value[j],value[j+1] = value[j+1],value[j]
                flag = True
        # 未发生交换,说明后面的数据有序,退出遍历
        if flag == False:
            break
    return value

print(sortport(value))

4、二分查找

lis = [1,3,4,5,7,9,10,11,12,14,16,17,19]

def binary(lis,key):
    left = 0
    right = len(lis)-1
    while left <= right:
        middle = (left + right) // 2
        if lis[middle] == key:
            return '找到了,下标为:%s'%middle
        elif lis[middle] > key:
            right = middle - 1
        else:
            left = middle + 1
    return '没有找到:%s'%key

key = 14
print(binary(lis,key))