這裡用 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...