氣泡排序
演算法思想(公升序排序):第一次遍歷,依次比較相鄰兩個元素的大小,大的放後面小的放前面,找到最大的元素排在最後,以此類推遍歷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 進行交換。即這趟選擇過程找到了...