常見的排序演算法總結

2021-10-23 01:38:43 字數 2862 閱讀 4649

1.氣泡排序

就像冒泡一樣,從頭對比相鄰的兩個,大的(或者小的)就交換到後面,一直到序列有序。

時間複雜度最壞,平均o(n^2),最好的時候是初始序列有序,第一趟後就不在發生交換,停止排序時間複雜度o(n)。空間複雜度為o(1)。

a =[11

,2,41

,7,22

,80,67

,1,0.1,88

]def

bubble_sorted

(a):

flag =

true

####若某一趟排序沒有發生交換則停止。

index =

0while flag:

b =-1

for i in

range

(len

(a)-1)

:if a[i]

>a[i+1]

: b=

1

a[i]

,a[i+1]

= a[i+1]

,a[i]

i +=

1if b ==-1

: flag =

false

return a

bubble(a)

2. 簡單選擇

每次從後面選擇最大的放到前面,第一次選最大的放第一位置,第二次選第二大的放第二…無論何種情況時間複雜度都為o(n^2)。空間複雜度為 o(1)。

a =[11

,2,41

,7,22

,80,67

,1,0.1,88

]def

get_maxindex

(a):

####獲取最大值的下標

index =-1

tmp =-1

for i in

range

(len

(a))

:if a[i]

>tmp:

tmp = a[i]

index = i

return index

defchoose

(a):

for i in

range

(len

(a))

: a[i]

,a[get_maxindex(a[i+1:

])+i+1

]= a[get_maxindex(a[i+1:

])+i+1

],a[i]

return a

3.快速排序

一趟排序,是選擇乙個基準值,一般為開頭值,結尾值作為對比,設定雙指標,i從頭向後找,找到比基準值大的停下,j從後向前找找到比基準值小的停下,然後交換i和j位置的元素,然後i繼續向後,j繼續向前。直到i大於等於j,這時候交換基準值和i位置的元素。基準值此時所在的位置就是其最終的位置。

然後以基準值為分界,將序列分為左右兩個,繼續執行快排。最好,平均時間複雜度為o(nlogn),最壞的情況是每次基準值,都將序列分為了列表長度-1,和1兩個子列表。即,待排序元素基本有序。

a =[11

,2,41

,7,22

,80,67

,1,0.1,88

,9]def

partition

(arr,low,high)

: i = low

j = high

pivot = arr[high]

while iwhile arr[i]

<=pivot and ii+=

1while arr[j]

>=pivot and ij-=

1 arr[i]

,arr[j]

= arr[j]

,arr[i]

arr[i]

,arr[high]

= arr[high]

,arr[i]

return i

defquick_sorted

(arr,low,high)

:if lowmid = partition(arr,low,high)

quick_sorted(arr,low,mid-1)

quick_sorted(arr,mid+

1,high)

4.歸併排序

將待排序元素,分成左右兩個,再將左右兩個分別再分為兩個,一直到每個排序序列只有乙個元素,

然後再兩兩合併,排序。

a =[2

,1,5

,6,73

,6]def

merge_sorted

(a):

iflen

(a)<=1:

return a

mid =

len(a)//2

larr = merge_sorted(a[

:mid]

) rarr = merge_sorted(a[mid:])

####merge

i,j =0,

0 tmp =

while i<

len(larr)

and j<

len(rarr)

:if larr[i]

i+=1else:)

j+=1 tmp +=

(larr[i:

]+rarr[j:])

return tmp

merge_sorted(a)

常見的排序演算法總結

include 演算法只是比較了元素為整數的內容.大部分的排序只是做了簡單的測試.僅供參考.void swap int a int b bool less int a,int b 對內部中的元素先找到k值,然後分兩塊 int partition int r,int lo,int hi while j...

常見的排序演算法總結

平時一直做專案,業務邏輯,對演算法這塊逐漸有了生疏 今天有空總結一下排序演算法 1 氣泡排序 氣泡排序的原理就是兩兩相比,從小到大的話前面比後面大就交換,從大到大的話前面比後面小就交換,比如有一組數 1,10,5,3,2 如何對它做排序 比如從小到大 第一步 1,10,5,3,2 源資料 1,10,...

常見的排序演算法總結

氣泡排序最常見版 void bubblesort int array,size t len int main bubblesort array,6 for size t i 0 i 6 i cout endl void bubblesort int array,size t len int main...