歸併排序法的C 實現

2021-06-08 02:13:20 字數 887 閱讀 9027

歸併排序法

歸併排序法的空間代價為o(n),使用了輔助空間temparr。

時間代價為nlogn,因為樹高為logn,而每層中消耗時間為o(n)。

歸併排序通過將乙個長序列逐漸的劃分為較小的序列,最後劃分為1個個長度為1的串,然後依次進行合併。

#ifndef mergesort_h

#define mergesort_h

#include using namespace std;

templateclass mergesort;

#endif

/*** 歸併排序法

* 先分解後合併,因此使用後序周遊

*/templatevoid mergesort::mergesort( t *sortedarr,t *temparr,int arrlength )

else

}while( iindex<=middle )

while( jindex<=right )

}

歸併排序法的優化:

1、可以優化遞迴,含義與快速排序法類似,當子串長度較小時,不必使用遞迴而是使用插入排序法

2、對於合併的左右子串,使其背對背從而減少不必要的比較

/**

* 改進的歸併排序

*/templatevoid mergesort::optimmergesort( t *sortedarr,t *temparr,int arrlength )

for( int i=right;i>=middle+1;--i )

for( int iindex=left,jindex=right,k=left;k<=right;++k )

else

}}

分治法實現歸併排序

分治法實現歸併排序 include using namespace std define size 10 void merge int array,int first,int mid,int last 合併 if i mid for i mid i new arr k array i if j la...

分治法實現歸併排序

將乙個難以直接解決的大問題,分割成一些規模較小的相同問題,以便各個擊破,分而治之。將待排序元素分成大小大致相同的兩個子集合,分別對兩個子集合進行排序,最終將排好序的子集合合併成要求的排好序的集合 void mergesort int a,int left,int right void mergeso...

C語言分治法實現歸併排序

歸併排序的基本思想 將兩個及其以上的有序表合併為一張有序表,把待排序序列通過分治法分為若干個有序子串行,然後每兩個子串行合併為乙個子串行,經過多次合併後集成為一張有序表。排序過程如圖 如下 include stdio.h define max 100 int is1 max is2 max 原陣列i...