演算法基本思想:
歸併排序:
def mergesort(l):
""" 歸併排序
l: 待排序列表;
"""_mergesort_c(l,0,len(l)-1)
def _mergesort_c(l,p,r):
"""p: 起始下標;
r: 結束下標;
"""if p>=r:
return
q = (p+r)//2
_mergesort_c(l, p, q)
_mergesort_c(l, q+1, r)
_merge(l, p, q, r)
def _merge(l,p,q,r):
""""""
i,j = p,q+1
tmp =
while i<=q and j<=r:
if l[i] <= l[j]:
i += 1
else:
j += 1
if r-j > q-i:
start, end = j, r
else:
start, end = i, q
tmp.extend(l[start:end + 1])
l[p:r+1] = tmp
快速排序:
def quicksort(l):
""" 快速排序
l: 待排序列表;
n: 列表長度;
"""_quicksort_c(l, 0, len(l)-1)
def _quicksort_c(l, p, r):
if p >= r:
return
q = _partition(l, p, r)
_quicksort_c(l, p, q-1)
_quicksort_c(l, q+1, r)
def _partition(l, p , r):
pivot = l[r]
i = p
for j in range(p,r):
if l[j] <= pivot:
l[i],l[j] = l[j],l[i]
i += 1
l[r],l[i] = l[i],l[r]
return i
分析上述兩個排序演算法,其不同之處就在於:
歸併需要利用_merge(l,p,q,r)函式將兩個子串行合併,而快排則是需要利用_partition(l, p , r)函式將序列分為兩個子串行。
資料結構與演算法 歸併排序
include include include string include include include include algorithm using namespace std void merge vector input,int left,int mid,int right,vector...
資料結構與演算法(歸併排序)
歸併排序是採用分治法的乙個典型的應用,歸併排序的思想就是先遞迴分解陣列,在合併陣列。將陣列分解最小之後,然後合併兩個有序陣列,基本思路是比較兩個陣列的前面的數,誰小就先取誰,取了後相應的指標就往後移一位,直至乙個陣列為空,最後把另乙個陣列的剩餘部分複製過來即可。def merge sort alis...
資料結構與演算法 歸併排序
你可以在 的 mer 標籤中看到歸併排序的動畫。歸併排序 時間複雜度 o nlogn 空間複雜度 o n 基本思想 分治思想。8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 分 8 6 2 3 1 5 7 4 並 8 6 2 3 1 5 7 4...