快速排序

核心在于选择一个值后,每次把剩下的所有值归到比这个值大的一边和小的一边,然后对于比如大的一边里面,继续递归的重复这个过程

## 快速排序
def quick_sort(li):
# 当数组长度大于1的时候才需要排序递归下去
    if len(li)>1 :
    # 重要的第一步,取出C位的那个数字作为基准
        mid = li[len(li)//2]
        right=[]
        left=[]
        #移除基准后,剩下的数字逐个和基准比
        li.remove(mid) 
        for i in range(len(li)):
        #比基准大的放新的右列表中,比基准小的放左列表中
            if li[i]>=mid:
                right.append(li[i])
            else:
                left.append(li[i])
        # 下面这部是最核心的一步,归出来的左右列表继续递归
        return quick_sort(left)+[mid]+quick_sort(right)
    else : return li
if __name__ == '__main__':
    li=[66,21,4,56,78,5,65]
    b=quick_sort(li)
    print(b)

冒泡排序

核心在于从某个数(一般是第一个)开始跟隔壁比大小,然后不断交换,这样如果是从小到大排列,从左开始比,第一轮下来,最大的数就会到最后一个排好

# 冒泡排序
def bubble_sort(li):
    # 建立一个标识符,这样如果某一次一个数都没交换,则标识符为false,则不需要继续下去了,能节省几次循环
    flag = False
    # 从第一个数开始比,最差只需要比总长度-1次
    for i in range(len(li)-1):
    # 第i个数比的时候,只需要和去掉最后i个再去掉本身1个的里面比
        for j in range(len(li)-i-1):
        # 如果本数字大于后一个,就交换位置
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]
                flag = True
            if flag==False: break
    return li
    
if __name__ == '__main__':
    li=[66,21,4,56,78,5,65]
    a=bubble_sort(li)
    print(a)

一闪一闪
7 声望2 粉丝