經典排序演算法(Python實現)

2021-10-13 09:02:07 字數 2184 閱讀 9326

氣泡排序

演算法思想(公升序排序):第一次遍歷,依次比較相鄰兩個元素的大小,大的放後面小的放前面,找到最大的元素排在最後,以此類推遍歷n-1次。

def

bubblesort

(array)

length =

len(array)

for i in

range

(length)

:for j in

range

(length-i-1)

:if array[j]

>array[j+1]

: array[j]

,array[j+1]

= array[j+1]

,array[j]

return array

空間複雜度:o(1)

時間複雜度:最好o(n),最壞o(n^2)

穩定性:穩定

快速排序

演算法思想(公升序排序):首先先選出乙個基準,經過一次排序選出比基準大的數放在左邊,比基準小的數放基準右邊,然後遞迴地對這兩個子數列分別進行排序。

詳細解釋

def

quicksort

(array,left,right)

:if left >= right:

return array

mid,i,j = array[left]

,left,right

while i < j:

while i>= mid:

j -=

1 array[i]

= array[j]

while i<= mid:

i +=

1 array[j]

= array[i]

array[i]

= mid

quicksort(array,left,i-1)

quicksort(array,left+

1,right)

return array

時間複雜度:o(nlogn)

空間複雜度:o(logn)

穩定性:不穩定

選擇排序

演算法思想(公升序排序):遍歷列表n-1次,每次在未排序序列中找到最小元素依次放到已排序序列末位位置。將未排序序列的第乙個數作為基準,與未排序序列中的其它數進行比較,遇到更小的元素則交換位置,遍歷選出最小的元素。

def

selectsort

(array)

: length =

len(array)

for i in

range

(length-1)

:for j in

range

(i+1

,length)

:if array[j]

< array[i]

: array[i]

,array[j]

= array[j]

,array[i]

return array

時間複雜度:o(n^2)

空間複雜度:o(1)

穩定性:穩定

插入排序

演算法思想(公升序排序):從第乙個元素開始,預設該元素已被排序。取出下乙個元素,在已排序的元素中從後向前掃瞄,如果已排序元素大於新元素,則移到下乙個位置,重複向前掃瞄,直到找到已排序的小於等於新元素的元素,把新元素插到該元素後,重複步驟。

def

insertionsort

(array)

: length =

len(array)

for i in

range(1

,length)

: j = i-

1while j >

0and array[i]

<= array[j]

: array[j+1]

= array[j]

j-=1 array[j+1]

= array[i]

return array

時間複雜度:最好o(n),最壞o(n^2)

空間複雜度:o(1)

穩定性:穩定

經典排序演算法 選擇排序 python實現

選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理 首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。演算法描述 n個記錄的直接選擇排序可經過n ...

Python實現經典排序演算法

import random lis list range 100 random.shuffle lis print lis def bubblesort arr for i in range 1 len arr for j in range 0 len arr i if arr j arr j 1 ...

經典排序演算法及python實現

假如,有乙個無須序列a 選擇排序的過程應該如下 第一趟 選擇最小的元素,然後將其放置在陣列的第乙個位置a 0 將a 0 6和a 2 1進行交換,此時a 第二趟 由於a 0 位置上已經是最小的元素了,所以這次從a 1 開始,在剩下的序列裡再選擇乙個最小的元素將其與a 1 進行交換。即這趟選擇過程找到了...