使用歸併排序實現C 標準庫中的sort函式

2021-09-18 05:49:33 字數 1581 閱讀 1269

標準庫里的函式宣告

template

<

class

_ranit

,class

_pr>

inline

void

sort

(const _ranit _first,

const _ranit _last, _pr _pred)

;

個人覺得難點在於template模板的使用,可以使用template的方式來盛放乙個類和函式。

歸併排序本身沒啥好講的,直接給出**如下:

#include

#include

using

namespace std;

template

<

class

_ranit

,class

_pr>

void

__merge

(_ranit &_frist,

int l,

int mid,

int r, _pr _pred)

int j = l, k = mid+

1,m =0;

for(

int i = l; i <= r; i++

)else

if(k > r)

elseif(

_pred

(aux[j - l]

,aux[k - l]))

else}if

(aux !=

null)}

template

<

class

_ranit

,class

_pr>

void

__mergesort

(_ranit &_frist,

int l,

int r, _pr _pred)

int mid =

(l + r)/2

;__mergesort

(_frist, l, mid, _pred)

;__mergesort

(_frist, mid +

1, r, _pred)

;__merge

(_frist, l, mid, r, _pred);}

template

<

class

_ranit

,class

_pr>

void

mergesort

(_ranit _frist, _ranit _end, _pr _pred)

//測試**

bool

cmp(

int a,

int b)

intmain()

mergesort

(arr.

begin()

, arr.

end(

),cmp)

;for

(int x : arr)

cout << endl;

return0;

}

歸併排序 C 實現

歸併排序跟快速排序一樣,也是基於 分治法 歸併排序與快速排序的區別 快速排序是先 分治 成兩個子串行,然後呼叫本身繼續遞迴進行 分治 歸併排序是先遞迴地分成子串行,然後按演算法合併。歸併排序是先遞迴地把待排序序列分成若干子串行,直到最後分成乙個乙個元素為子串行,然後對些子串行中每個元素,依照其大小合...

C 實現歸併排序

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

C 歸併排序實現

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