排序問題的分治法

2021-05-17 18:49:28 字數 659 閱讀 9360

一、將乙個任意次序的由n個整數構成的單一序列,我們用於兩個序列,其中a為長度為n1的序列,b為長度為n2的序列,它們各自近似有n/2個元素,且這兩個序列都已經排序。

二、merge(合併)演算法在o(n1+n2)時間內可把兩個已經排序的序列組合成單一的排序序列。

merge(a,b)

n1<-a的大小

n2<-b的大小

an1+1<-∞

bn2+1

<-∞

i<-1

j<-1

for k<-1 ton1+n2

if aijc

k<-a

ii<-i+1 

else ck

<-bj

j<-j+1

returnc   

三、遞迴形式完成合併排序。mergesort(c)

n<-c的大小

ifn=1

return c

left<-c的前n/2元素的片段

right<-c的後n-n/2元素的片段

sortedleft<-mergesoft(left)

sortedright<-mergesoft(right)

sortedlist<-merge(sortedleft,sortedright)

returnsortedlist

分治法中的排序問題

分治法求解排序問題的思想很簡單,只需按某種方式將序列分為兩個或多個子串行,分別進行排序,再將已經排好序的子串行合併成乙個有序序列即可。合併排序和快速排序是兩種典型的符合分治策略的排序演算法。合併排序的基本運算時把兩個或者多個有序序列合併成乙個有序序列。下面以兩路合併排序為例說明。注 以c 為例。其中...

分治法排序

分治法排序 1 把大問題分為小問題 2 求每個小問題的解 3 和1反方向,把各個解合併起來 實現 1 啟用兩個快取,乙個放前半部份問題,乙個放後半部份問題 2 只用乙個大快取,用index的大小區分問題規模 include include void megre pre int pre,int fir...

分治法排序

include include define temp 10 int a temp int b temp void merge int low,int mid,int high else k while i mid while j high for i 0 i k i b low i a i int...