八大排序演算法之歸併排序

2021-09-17 21:57:11 字數 1790 閱讀 2726

歸併排序的核心是,每次將兩個有序陣列組合成為乙個新的有序陣列。對於倆個有序陣列:

def merge(a:list,b:list)-->list:

l_a,l_b = len(a),len(b)

res = [0 for i in range(l_a+l_b)]

index = 0

i,j = 0,0

while i歸併排序中,兩個有序陣列是一段連續陣列的倆部分:

#arr 傳入陣列,l,mid,r 傳入陣列的左邊界,中間,右邊界。l到mid與mid到r均有序,對l到r進行排序

def merge(arr,l,mid,r):

hel = [0 for i in range(r-l+1)]

i = 0

p1,p2 = l,mid+1

while p1<=mid and p2<=r:

if arr[p1]對於歸併排序:

#歸併排序,arr:排序陣列 l:排序陣列左邊界,r:排序陣列右邊界。遞迴最深處的排序陣列均為乙個數字的陣列,可以視為有序陣列。

def sortprocess(arr,l,r):

if l==r:

return

mid = (l+r>>1)

sortprocess(arr,l,mid)

sortprocess(arr,mid+1,r)

merge(arr,l,mid,r)

def merge(arr,l,mid,r):

hel = [0 for i in range(r-l+1)]

i = 0

p1,p2 = l,mid+1

while p1<=mid and p2<=r:

if arr[p1]附上完整**+對數器

import random

#size:陣列長度

#end:範圍

def getrandomarray(size,end,start=1):

res = [random.randint(start,end) for i in range(size)]

return res

def sortprocess(arr,l,r):

if l==r:

return

mid = (l+r>>1)

sortprocess(arr,l,mid)

sortprocess(arr,mid+1,r)

merge(arr,l,mid,r)

def merge(arr,l,mid,r):

hel = [0 for i in range(r-l+1)]

i = 0

p1,p2 = l,mid+1

while p1<=mid and p2<=r:

if arr[p1]結果集:

[2, 1, 4, 10, 7, 5, 14, 1, 8, 2, 10, 10, 9, 15, 15, 12, 4, 2, 11, 3]

[1, 1, 2, 2, 2, 3, 4, 4, 5, 7, 8, 9, 10, 10, 10, 11, 12, 14, 15, 15]

true

時間複雜度o(nlogn),空間複雜度o(n)

同時,倆個陣列合併的merge函式可以修改為:

def merge(arr,l,mid,r):

hel = [0 for i in range(r-l+1)]

i = 0

p1,p2 = l,mid+1

while p1<=mid and p2<=r:

if arr[p1]與原函式沒有差距。

八大排序演算法 之 歸併排序

排序思想 如圖所示 排序趟數 如果2 n 如此例,length 9 8,趟數是4.排序原理 1,第一趟將相鄰兩個數歸併成乙個有序的小組合 2,第二趟將相鄰兩個有序小組合歸併成乙個更大的的有序組合 3,依次類推,直到將所有數歸併成乙個最大的組合 具體 實現如下 歸併排序主方法 public stati...

八大排序演算法之歸併排序

介紹到這裡只剩下歸併排序和基數排序沒有介紹過了。這兩種演算法各有各的特點,歸併排序是分治法的一種有效應用,所謂歸併是指將若干個已排好序的部分合併成乙個有序的部分。而基數排序又稱為桶排序,是唯一一種不需要元素之間相互比較就可以排好序的排序演算法。一 歸併排序 1.基本思想 這裡介紹的歸併排序是非遞迴版...

八大排序演算法之歸併排序

說明 歸併排序是建立在歸併操作上的一種有效的排序演算法。該演算法是採用分治法 divide and conquer 的乙個非常典型的應用。將已有序的子串行合併,得到完全有序的序列 即先使每個子串行有序,再使子串行段間有序。若將兩個有序表合併成乙個有序表,稱為2 路歸併。思路 1.將序列中待排序數字分...