python之算法LOB三人組

1、冒泡排序算法

    a、冒泡排序----優化dom

          若是冒泡排序中執行一趟而沒有交換,則列表已是有序狀態,能夠直接結算法優化

import random
from timewrap import *

@cal_time
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]

@cal_time
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)

2、選擇排序spa

    a、一趟遍歷記錄最小的數,放到第一個位置;code

    b、在一趟遍歷記錄剩餘列表中最小的數,繼續放置blog

import random
from timewrap import *

@cal_time
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)

3、插入排序排序

    a、列表被分爲有序區和無序區兩個部分,最初有序區只有一個元素class

    b、每次從無序區選擇一個元素,插入到有序區的一個位置,直到無序區變空import

import random
from timewrap import *

@cal_time
def insert_sort(li):
    for i in range(1, len(li)):
        # i 表示無序區第一個數
        tmp = li[i] # 摸到的牌
        j = i - 1 # j 指向有序區最後位置
        while li[j] > tmp and j >= 0:
            #循環終止條件: 1. li[j] <= tmp; 2. j == -1
            li[j+1] = li[j]
            j -= 1
        li[j+1] = tmp


li = list(range(10000))
random.shuffle(li)
print(li)
insert_sort(li)
print(li)
相關文章
相關標籤/搜索