C 泛型歸併排序及泛型二分查詢

2021-09-14 08:54:04 字數 3267 閱讀 2278

常見的演算法時間複雜度由小到大依次為:ο(1)<ο(log2n)<ο(n)<ο(nlog2n)<ο(n2)<ο(n3)<…<ο(2n)<ο(n!)

1.我們先建立乙個標頭檔案 algorithm_sort.h 下面是內容

#include 

template <

class

iterator

,class

strategy

>

inline void

mergesort

(iterator _first, iterator _last,

strategy _strategy)

template <

class

iterator

,class

strategy

>

inline void

_merge

(iterator _part1first, iterator _part1last,

iterator _part2first, iterator _part2last,

strategy _strategy)

else}if

(itpart1 < _part1last)

result.

insert

(result.

end(

), itpart1, _part1last);if

(itpart2 < _part2last)

result.

insert

(result.

end(

), itpart2, _part2last)

; itpart1 = _part1first;

itpart2 = _part2first;

vector

::iterator it = result.

begin()

;while

(it != result.

end())

else

if(itpart2 != _part2last)

it++;}

}

2.下面是呼叫過程

#include "stdafx.h"

#include

#include "algorithm_sort.h"

#include

using namespace std;

struct mystruct

;template<

class

t>

bool max

(t a,

t b)

//排序策略

int _tmain

(int argc, _tchar* ar**)

}

3.輸出結果

1.我們先建立乙個標頭檔案 algorithm_search.h 下面是內容

template<

class

iterator

,class

strategy

,class

t>

inline iterator binarysearch

(iterator _first, iterator _last, strategy _strategy,

const

t& key)

return _last;

}

2.下面是呼叫過程,在原有歸併排序的基礎上擴充二分查詢 。因為二分查詢需要有序集合!

#include "stdafx.h"

#include

#include "algorithm_sort.h"

#include

#include "algorithm_search.h"

using namespace std;

struct mystruct

;template<

class

t>

bool max

(t a,

t b)

//排序策略

template<

classt1,

class

t2>

int findkey

(t1 a,

t2 b)

//查詢策略

int _tmain

(int argc, _tchar* ar**)

//二分查詢

vector

::iterator it =

binarysearch

(data.

begin()

, data.

end(

), findkey,4

);cout << it-

>age <<

' ';

system

("pause");

return0;

}

3.輸出結果 找到了num是4的物件內age成員的值

這樣寫可以免去外接乙個判別策略函式的麻煩

int _tmain

(int argc, _tchar* ar**)

);for(size_t i =

0; i < data.

size()

; i++

)//二分查詢

//lambda表示式寫法

vector

::iterator it =

binarysearch

(data.

begin()

, data.

end(),

(mystruct mystruct, int num),4

);cout << it-

>age <<

' ';

system

("pause");

return0;

}

泛型演算法之二分查詢

泛型演算法之二分查詢實現,及簡單測試。查詢範圍可以是c 內建指標或者容器的迭代器,查詢內容可以是char,int等型別 include include include include include using namespace std template randomaccessiterator ...

泛型排序(C )

一般講排序演算法的文章,為了方便說明演算法本身,待排序元素的型別一般使用整型。還有些文章講泛型排序,待排序元素可以是任意型別,但對於待排序序列,卻一般只支援某一種儲存形式,比如定長陣列,比如std vector,但不能同時支援它們。那麼我們有沒有辦法使用泛型技術即支援任意元素型別又支援大多數常用的序...

C語言泛型程式設計 泛型氣泡排序

在實際程式設計中,常常會需要一些方法 函式 比如排序,它們具體實現基本一致,僅僅只有引數型別不同,那麼可不可以有一種通用的函式,不管是什麼型別的引數都可以通用呢?泛型程式設計 泛型即是指具有在多種資料型別上皆可操作的含義,與模板有些相似。利用泛型程式設計,我們可以寫一些通用的函式,以減少 量,實現 ...