Python實現排序演算法

2021-10-04 19:07:42 字數 2751 閱讀 7921

一.氣泡排序

該排序重複地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果順序(如從大到小、首字母從z到a)錯誤就把他們交換過來。走訪元素的工作是重複地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。

穩定性:

氣泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,是不會再交換的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以氣泡排序是一種穩定排序演算法

時間複雜度:

氣泡排序時間複雜度為o(n)到o(n2)

空間複雜度:

氣泡排序空間複雜度為o(1)

**如下:

def

bubble_sort

(num)

:for i in

range

(len

(num)-1

):for j in

range

(len

(num)

-i-1):

if num[j]

> num[j+1]

: num[j]

,num[j+1]

=num[j+1]

,num[j]

return num

氣泡排序經過改進為雞尾酒排序,該演算法與氣泡排序的不同處在於排序時是以雙向在序列中進行排序。

**如下:

def

cocktail_sort

(num)

: size =

len(num)

sign =

1for i in

range

(int

(size /2)

):if sign:

sign =

0for j in

range

(i, size -

1- i)

:if num[j]

> num[j +1]

: num[j]

, num[j +1]

= num[j +1]

, num[j]

for k in

range

(size -

2- i, i,-1

):if num[k]

< num[k -1]

: num[k]

, num[k -1]

= num[k -1]

, num[k]

sign =

1else

:break

return num

二.插入排序

插入排序適用於已經有部分資料已經排好,並且排好的部分越大越好。一般在輸入規模大於1000的場合下不建議使用插入排序。

對於少量元素的排序,插入排序是一種最簡單的排序方法,它的基本思想是將乙個記錄插入到已經排好序的有序表中,從而乙個新的、記錄數增1的有序表。其實現過程使用雙層迴圈,外層迴圈對除了第乙個元素之外的所有元素,內層迴圈對當前元素前面有序表進行待插入位置查詢,並進行移動。

穩定性:

該演算法是穩定的。

時間複雜度:

插入排序時間複雜度為o(n)到o(n2)

空間複雜度:

插入排序空間複雜度為o(1)

**如下:

def

insert_sort

(num)

:for i in

range(1

,len

(num)):

tmp = num[i]

j = i -

1while j >=

0and tmp < num[j]

: num[j+1]

= num[j]

j = j -

1 num[j +1]

= tmp

return num

三.選擇排序

它的工作原理是:第一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,然後再從剩餘的未排序元素中尋找到最小(大)元素,然後放到已排序的序列的末尾。以此類推,直到全部待排序的資料元素的個數為零。

穩定性:

該演算法是不穩定的。

時間複雜度:

選擇排序時間複雜度為o(n2)

空間複雜度:

選擇排序空間複雜度為o(1)

**如下:

def

select_sort

(num)

: length =

len(num)

for i in

range

(length)

:min

= i for j in

range

(i,length)

:if num[j]

< num[

min]

:min

= j num[i]

,num[

min]

= num[

min]

,num[i]

return num

排序演算法python實現

先列出一些演算法複雜度的識別符號號的意思,最常用的是o,表示演算法的上屆,如 2n2 o n2 而且有可能是漸進緊確的,意思是g n 乘上乙個常數係數是可以等於f n 的,就是所謂的a b。而o的區別就是非漸進緊確的,如2n o n2 o n2 確實可以作為2n的上屆,不過比較大,就是所謂的a其他符...

python排序演算法實現

coding utf 8 氣泡排序 氣泡排序演算法的運作如下 比較相鄰的元素。如果第乙個比第二個大 公升序 就交換他們兩個。對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。針對所有的元素重複以上的步驟,除了最後乙個。持續每次對越來越少的元素重複上面的步...

Python實現排序演算法

一.基數排序 最高位優先法,簡稱msd法 先按k1排序分組,同一組中記錄,關鍵碼k1相等,再對各組按k2排序分成子組,之後,對後面的關鍵碼繼續這樣的排序分組,直到按最次位關鍵碼kd對各子組排序後。再將各組連線起來,便得到乙個有序序列。最低位優先法,簡稱lsd法 先從kd開始排序,再對kd 1進行排序...