小白學資料,只為記錄學習程序,對每個問題有新的理解會及時更正。
一、歸併排序
歸併排序是乙個先分再合的過程,先將序列通過二分法分成乙個個子序列,後面再比較相鄰的兩個序列,把兩個序列合併成乙個有序序列,重複這個過程,直到合併完畢
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...