作業4 二分歸併排序演算法

2021-10-04 07:38:09 字數 839 閱讀 1210

二分歸併排序:對n個不同的數構成的陣列a[1…n]進行排序,其中n=2^k;

對乙個陣列利用遞迴拆分成n/2個子序列,比較排序後再歸併成原陣列。

void mergesort(first , last)

void mergearray(first,mid,last,tmp)

時間複雜度:o (n * logn)

空間複雜度:o (n)

#include

#include

#define max 10

void

mergearray

(int a,

int first,

int mid,

int last,

int temp)

while

(i <= m)

temp[k++

]= a[i++];

while

(j <= n)

temp[k++

]= a[j++];

for(i =

0; i < k; i++

) a[first + i]

= temp[i];}

void

mergesort

(int a,

int first,

int last,

int temp)

}int

main()

mergesort

(a,0,9

,temp)

;for

(int i =

0; i < max; i++

)}

二分歸併排序演算法 排序演算法之歸併排序

一 分治模式 許多有用的演算法在結構上是遞迴的 為了解決乙個給定的問題,演算法一次或多次遞迴地呼叫其自身以解決緊密相關的若干子問題。這些演算法典型地遵循分治法的思想 將原問題分解為幾個規模較小但類似於原問題的子問題。遞迴的求解這些問題,然後再合併這些子問題的解來建立原問題的解。分治模式在每層遞迴都有...

二分歸併排序 分治演算法與歸併排序

距離上次寫快排演算法的文章已經過去乙個半月了,和本文要提到的歸併排序演算法類似,快排也是分治思想的一種典型應用,如果有不熟悉快速排序的同學可以翻閱我之前寫過的的快速排序演算法的文章。首先為大家介紹一下什麼是分治,分治是將乙個大問題分割成若干個和原來問題形式相同但規模更小的子問題,然後處理這些小問題,...

歸併排序 二分

歸併排序就是將陣列反覆拆分成兩部分,然後分別在這兩部分裡面再反覆拆分,講拆分成的兩部分按順序排好之後再歸併起來,歸併起來之後再反覆交換位置,最終使整個陣列按順序排列。具體操作方法 按從小到大排 拆分成的兩部分依次比較,若前半部分的較小,將其存入陣列tmp中,將前面的下標i 若後面一部分較小,則將後面...