算法初步

時間復(fù)雜度

時間復(fù)雜度是用來估計算法運(yùn)行時間的式子(單位)。

image.png
時間復(fù)雜度小結(jié)
image.png

空間復(fù)雜度

用來計算一個算法臨時占用內(nèi)存的式子

遞歸復(fù)習(xí)

1、調(diào)用自身
2、結(jié)束條件

lowB三人組

冒泡排序

冒泡排序:列表在內(nèi)存重只存一份,所以不需要重復(fù)賦值
import random
from timewrap import *          #時間裝飾器

# 初級版本
@cal_time
def bubble_sort(li):
    for i in range(len(li) - 1):       #循環(huán)的躺數(shù)為總的躺數(shù)-1,因為最后一步?jīng)]必要走
        # i 表示趟數(shù)
        # 第 i 趟時: 無序區(qū):(0,len(li) - i)
        for j in range(0, len(li) - i - 1):  #循環(huán)i次之后就還有總長度-1-i次
            if li[j] > li[j+1]:              #如果低j個數(shù)比j+1個數(shù)還要大,說明j在j+1的上邊
                li[j], li[j+1] = li[j+1], li[j]        #交換位置

# 優(yōu)化版,和上邊的基本一樣,只是在他的基礎(chǔ)上增加了一層判斷,如果剛剛開始列表就是有序的則不需要進(jìn)行排序
@cal_time
def bubble_sort_2(li):
    for i in range(len(li) - 1):
        # i 表示趟數(shù)
        # 第 i 趟時: 無序區(qū):(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       #排序成功返回True
        if not change:        #如果沒有change的值代表沒有排序,
            return

li = list(range(10000))         #隨機(jī)產(chǎn)生10000個數(shù)
# random.shuffle(li)             #打亂后的結(jié)果
# print(li)
bubble_sort_2(li)               #沒有打亂排序,直接走if not change:
print(li)

選擇排序

#選擇排序
import random
from timewrap import *         #時間裝飾器,用來判斷函數(shù)執(zhí)行的時間長度

@cal_time
def select_sort(li):
    for i in range(len(li) - 1):
        # i 表示趟數(shù),也表示無序區(qū)開始的位置
        min_loc = i   # 最小數(shù)的位置          的到一個最小值
        for j in range(i + 1, len(li)):   #此時i就是最小值
            if li[j] < li[min_loc]:           #如果li[j]<li[min_loc]   說明j就是最小值
                min_loc = j
        li[i], li[min_loc] = li[min_loc], li[i]       #交換位置,最小值放在前邊


li = list(range(10000))    #隨機(jī)產(chǎn)生1000個數(shù)字
random.shuffle(li)         #打亂
print(li)
select_sort(li)            #調(diào)用函數(shù),排序
print(li)

插入排序

#插入排序
import random
from timewrap import *

@cal_time
def insert_sort(li):
    for i in range(1, len(li)):
        # i 表示無序區(qū)第一個數(shù)
        tmp = li[i] # 摸到的牌                 隨機(jī)去到一支歌
        j = i - 1 # j 指向有序區(qū)最后位置
        while li[j] > tmp and j >= 0:        # 有序區(qū)最下的值
            #循環(huán)終止條件: 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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、 單項選擇題(共71題) 對n個元素的序列進(jìn)行冒泡排序時,最少的比較次數(shù)是( )。A. n ...
    貝影閱讀 9,420評論 0 10
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,298評論 0 52
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,822評論 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個記錄插入到已排序好...
    依依玖玥閱讀 1,348評論 0 2
  • 【狂云歌之unity_vr】VR開發(fā)中的優(yōu)化 前言 大概做了大半年的VR開發(fā),HTCVive上與room scal...
    cloudysong閱讀 1,170評論 0 7

友情鏈接更多精彩內(nèi)容