算法基础排序

二分法

def binary_search(l,val):
    start = 0
    end = len(l) - 1
    while start <= end:
        mid = (start+end)//2
        if l[mid] < val:
            start = mid + 1
        elif l[mid] > val:
            end = mid - 1
        else:
            print(mid)
            return mid
    else:
        return -1

li = list(range(0,100000,2))
binary_search(li,23232)

冒泡排序

时间复杂度:O(n2)

import random

def bubble_sort(li):
    for i in range(len(li) - 1):
        # i 表示趟数
        # 第 i 趟时: 无序区:(0,len(li) - i)
        for j in range(0, len(li) - i - 1):
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]

def bubble_sort_2(li):
    for i in range(len(li) - 1):
        # i 表示趟数
        # 第 i 趟时: 无序区:(0,len(li) - i)
        change = False
        for j in range(0, len(li) - i - 1):
            if li[j] > li[j+1]:
                li[j], li[j+1] = li[j+1], li[j]
                change = True
        if not change:
            return

li = list(range(10000))
# random.shuffle(li)
# print(li)
bubble_sort_2(li)
print(li)

选择排序

时间复杂度:O(n2)

import random

def select_sort(li):
    for i in range(len(li) - 1): # 此处可以不减一
        # i 表示趟数,也表示无序区开始的位置
        min_loc = i  # 最小数的位置
        for j in range(i + 1, len(li)):
            if li[j] < li[min_loc]:
                min_loc = j
        li[i], li[min_loc] = li[min_loc], li[i]


li = list(range(10000))
random.shuffle(li)
# print(li)
select_sort(li)
print(li)

插入排序

时间复杂度:O(n2)

def insert_sort(l):
    for i in range(1,len(li)):
        # 拿出需要排序的数据,这个位置正好空出一个,如果左边有的数据比他大
        # 说明左边有数据需要右移放到他这个位置
        tmp = l[i]
        j = i - 1
        # while循环找到左侧比tem大的向移动,最后 tmp放到空出来的地方
        while j >=0 and tmp 

你可能感兴趣的:(算法基础排序)