歸併排序 C 實現

2021-06-22 10:38:51 字數 1243 閱讀 7650

歸併排序跟快速排序一樣,也是基於「分治法」。

歸併排序與快速排序的區別:

快速排序是先「分治」成兩個子串行,然後呼叫本身繼續遞迴進行「分治」。

歸併排序是先遞迴地分成子串行,然後按演算法合併。

歸併排序是先遞迴地把待排序序列分成若干子串行,直到最後分成乙個乙個元素為子串行,然後對些子串行中每個元素,依照其大小合併成乙個序列。

執行過程如下:

簡單的歸併排序**:

#include "stdio.h"  

// 歸併演算法需要乙個臨時資料

template< class elem >

int mergesort( elem list, elem tmplist, int i_start, int i_end )

// 開始歸併,從tmplist到list

int i_left = i_start, i_right = i_mid + 1;

for ( i_index = i_start; i_index <= i_end; i_index ++ )

return 0;

}

int main()

; const int i_len = 8;

int p_tmparr[i_len];

printf( "sizeof( p_srcarr ): %d", sizeof( p_srcarr ) );

printf( "%s", "before mergesort\n" );

int i_index = 0;

for( i_index = 0; i_index < i_len; i_index ++ )

printf( "%s", "\n" );

mergesort( p_srcarr, p_tmparr, 0, i_len - 1 );

printf( "%s", "after mergesort\n" );

for( i_index = 0; i_index < i_len; i_index ++ )

printf( "%s", "\n" );

return 0;

}

歸併排序的平均時間代價為:θ

(nlogn)

參考:《資料結構與演算法分析》

C 實現歸併排序

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

C 歸併排序實現

基本過程 採用分治的核心思想,把乙個複雜問題拆成若干子問題求解。通過遞迴的方法,不斷對左右兩部分進行拆分 比較左右兩部分大小,不斷將左右兩部分按順序合併 實現 include include using namespace std void merge vector int nums,int low...

歸併排序C 實現

基於分治法,利用歸併操作,將兩個有序序列合併成乙個有序序列,將當前子串行分為兩個子串行,遞迴地,使兩個子串行有序,遞迴到只有乙個元素的子串行,合併兩個子串行,得到乙個兩個元素的有序子串行,再次合併得到乙個含有四個元素的有序子串行,直到合併的序列為整個序列 void merge vector int ...