(C )資料結構排序 二路歸併排序

2021-08-20 21:30:58 字數 1072 閱讀 5080

二路歸併排基本思想:把擁有n個資料的陣列看做n個有序序列,然後兩兩歸併,得到n/2組有序序列;重複上述操作,達到n/4組有序序列;重複上述操作,直到n個資料均為有序。

平均情況的時間複雜度          最好情況的時間複雜度               最壞情況的時間複雜度         空間複雜度

o(nlog2(n))                       o(nlog2(n))

o(nlog2(n))                      o(n)

資料儲存在a[1]~a[n],兩個相鄰有序序列歸併一次的**實現

void merge(type a,type b,int s,int m,int t)

else

}if(i<=m)

}else }

}

資料進行一趟歸併的**實現:

當第乙個序列的下標為i時

(1)若i<=n-2h+1,待歸併資料還有兩個相鄰的長度為h的序列;

(2)若i(3)若i>=n-h+1,只剩下乙個有序序列,直接將有序序列傳送給。

templatevoid mergepass(type a,type b,int n,int h)

if(i二路歸併的**實現:

#includeusing namespace std;

template//資料儲存在人r[1]~r[n]

void merge(type a,type b,int s,int m,int t)

else

}if(i<=m)

}else }

} templatevoid mergepass(type a,type b,int n,int h)

if(ivoid mergesort1(type a,int n)

}int main()

; for(int i=0;i<7;i++)

cout

for(int i=0;i<7;i++)

cout

}

排序 歸併排序(二路歸併)

基本思想 將兩個有序表合併成乙個有序表。將下列兩個已排序的順序表合併成乙個已排序表。順序比較兩 者的相應元素,小者移入另一表中,反覆如此,直至其中任一表都移入另 一表為止。二路歸併排序的基本思想是將兩個有序表合併成乙個有序表。給定排序碼46,55,13,42,94,05,17,70,二路歸併排序過程...

歸併排序 二路排序

先直接給出 include include include void mergearray int a,int left,int mid,int right,int tmp else 將剩餘的值賦值給臨時陣列 while i m while j n 將臨時陣列複製到目標陣列 for i 0 i k ...

二路歸併排序

不是困難的演算法,不過也是練習了下遞迴。include include include using namespace std const int maxn 100 5 int a maxn int b maxn void mergesort int a,int b,int begin,int en...