禪道 排序演算法

2021-08-28 00:26:24 字數 3116 閱讀 5981

這裡用 python 總結常用的幾種排序演算法

定期整理點滴,完善自己,今後給洋哥掙錢,陪伴著讓我的小寶貝發自內心愛上笑,加油吧

直譯寫法

def

insert_sort

(list):

n = len(list)

for i in range(1, n):

for j in range(i, 0, -1):

if list[j] < list[j - 1]:

list[j], list[j - 1] = list[j - 1], list[j]

else:

break

演算法分析上面的**中,list[j], list[j - 1] = list[j - 1], list[j]·這一步很費操作步驟,相當於執行三次複製,而且大小判斷,需要每個迴圈遍歷一遍,如果用賦值語句操作,採用附加條件,可以對演算法進行優化

優化後寫法

def

insert_sort

(list):

n = len(list)

for i in range(1, n):

key = list[i]

j = i - 1

while j >= 0

and list[j] > key:

list[j + 1] = list[j]

j -= 1

list[j + 1] = key

**解析在這個演算法裡,我們使用key來儲存外迴圈中第乙個元素的值,建立j變數代表當前元素的前乙個元素的下標,我們使用while迴圈,並用and新增迴圈條件list[j] > key,來判斷當前元素是否比外迴圈中的當前元素key大,這樣能提前結束迴圈,不需要每個遍歷一遍,保證演算法效率,如果滿足上面的條件,對當前元素進行賦值,較大元素儲存在裡面,接著讓j - 1後繼續迴圈,當迴圈結束後,把key儲存到合適的位置,即list[j = 1]此處。

def

select_sort

(list):

n = len(list)

for i in range(n - 1):

min_index = i

for j in range(i + 1, n):

if list[min_index] > list[j]:

min_index = j

if i != min_index:

list[min_index], list[i] = list[i], list[min_index]

**解析我們用for迴圈資料直至最後乙個元素,在外迴圈中,首先假設第乙個元素是當前資料的最小元素,用min_index記錄其下標,內迴圈開始遍歷資料,從第i + 1個元素開始,驗證當前最小下標所代表的元素是否是所有資料中的最小元素,如果不是則進行交換,把實際最小元素的下標賦值給min_index,最後的if語句是為了容錯處理,因為一開始假設把最小值下標賦給了min_index,替換原來的值,直至外迴圈遍歷結束。

def

bubble_sort

(list):

n = len(list)

for i in range(n - 1):

count = 0

for j in range(n - i - 1):

if list[j] > list[j + 1]:

list[j], list[j + 1] = list[j + 1], list[j]

count += 1

if count == 0:

break

**解析氣泡排序是在兩個元素間操作,外迴圈只有n - 1次,定義count變數來記錄交換次數,內迴圈中為了不遍歷先前已經排好的元素,range的引數設定為n - i - 1,再判斷兩個相鄰元素的大小,如果當前元素大於下乙個元素,則交換兩個元素的值,接著繼續記錄count,若count == 0,序列已經有序

def

shell_sort

(list):

n = len(list)

gap = n // 2

while gap >= 1:

for i in range(gap, n):

j = i

while (i - gap) >= 0:

if list[i] < list[i - gap]:

list[i], list[i - gap] = list[i -gap], list[i]

j -= gap

else

break

gap //= 2

**解析可以將陣列列在乙個表中並對列分別進行插入排序,重複這過程,不過每次用更長的列來進行。最後整個表就只有一列了,我們選擇增量gap = len // 2,增量影響演算法的效能

本篇尚未完

2023年9月12日18時於廣州逸夫科學館

linux搭建禪道 在Linux上搭建禪道

碎碎念 第一次安裝還比較順利,做筆記的同時希望能給需要的同學們帶來一點點幫助!環境 在vmware的centos 6.8發行版本上搭建禪道 一 首先確認centos是32位還是64位系統,方法如下 root localhost getconf long bit 三 使用工具 我用的xftp 將安裝包...

禪道專案管理

禪道是一款專案管理軟體,從功能上可分為三個部分 產品 專案 測試。角色 專案經理 測試經理 研發人員 測試人員 最煩的是需求變更,每次變更,意味著之前的的一些工作都白忙活了,沒有價值。敏捷開發,將龐雜和混亂的產品細分成若干小型發布 產品 5 9個人的團隊 比較合適 團隊 形成節奏,節奏產生效率 週期...

禪道使用記錄

修改資料庫密碼後還需修改以下檔案中的密碼 d zentao xampp phpmyadmin config.inc.php cfg servers 1 auth type config cfg servers 1 user root cfg servers 1 password root cfg s...