資料結構與演算法 排序演算法(python)2

2021-10-09 08:43:32 字數 1473 閱讀 8068

小白學資料,只為記錄學習程序,對每個問題有新的理解會及時更正。

一、歸併排序

歸併排序是乙個先分再合的過程,先將序列通過二分法分成乙個個子序列,後面再比較相鄰的兩個序列,把兩個序列合併成乙個有序序列,重複這個過程,直到合併完畢

def

merge_sort

(list):

n =len(

list

)if n <=1:

return

list

mid = n//

2 left = merge_sort(

list

[:mid]

) right = merge_sort(

list

[mid:])

left_point,right_point =0,

0 res =

while left_point <

len(left)

and right_point <

len(right)

:if left[left_point]

<= right[right_point]:)

left_point +=

1else:)

right_point +=

1 res += left[left_point:

] res += right[right_point:

]return res

if __name__ ==

"__mian__"

:list=[

2,6,

9,4,

3,8,

4,1,

7]a = merge_sort(

list

)print

(a)

時間複雜度: o(nlogn)

二、希爾排序

在插入排序的基礎上,引進gap概念,通過構造子串行,來實現排序功能

list=[

2,6,

9,4,

3,8,

4,1,

7]n =len

(list

)gap = n//

2while gap >0:

for j in

range

(gap,n)

: i = j

while i >0:

iflist

[i]<

list

[i-gap]

:list

[i],

list

[i-gap]

=list

[i-gap]

,list

[i] i -= gap

else

:break

gap //=

2print

(list

)

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

資料結構與演算法 排序演算法

帶問題思考以下幾點 1 每個演算法的思想是什麼?2 每個演算法的穩定性怎樣?時間複雜度是多少?3 在什麼情況下,演算法出現最好情況 or 最壞情況?4 每種演算法的具體實現又是怎樣的?n每次選擇乙個元素k插入到之前已排好序的部分a 1 i 中,插入過程中k依次由後向前與a 1 i 中的元素進行比較。...

資料結構與演算法 排序演算法 快速排序

源 cpp view plain copy include void quicksort int int,int intfindposs int int,int intmain quicksort arry,0,6 printf after sorted n for i 0 i 7 i printf...

資料結構與演算法 排序

排序原理 1.比較相鄰的元素。如果前乙個元素比後乙個元素大,就交換這兩個元素的位置。2.對每一對相鄰元素做同樣的工作,從開始第一對元素到結尾的最後一對元素。最終最後位置的元素就是最大 值。氣泡排序的 實現 public static void sortpop int arr 測試 public st...