高速分揀函式模板

2021-09-07 02:19:09 字數 1659 閱讀 3088

在這段時間stl比較痴迷,然後做一些調查,今天,高速的排序演算法最初寫模板函式再次寫,**貼分享

有兩個版本號,能夠傳入比較器,自定義排序規則

高速排序演算法思路:

1)從序列中選出乙個元素作為基準;

2)重排序列,全部比基準小的元素位於基準左側。比基準大的元素位於基準右側。和基準相等的元素位於隨意一側,此過程稱為分組;

3)以遞迴的方式對小於基準的分組和大於基準的分組分別進行排序。

#include #include //列印函式模板

templatevoid print (iterator begin, iterator end)

//交換函式模板

templatevoid my_swap (type& a, type& b)

//高速排序函式模板,版本號一

templatevoid my_sort (iterator begin, iterator end)

while (! (j == p || *j < *p))

--j;

if (j != p)

} iterator it = begin;

++it;

if (p != begin && p != it) //對小於基準部分遞迴

my_sort (begin, p);

it = p;

++it;

if (it != end && it != last) //對大於基準部分遞迴

my_sort (it, end);

}//高速排序函式模板。版本號二(比版本號一多了比較器,其他同樣)

templatevoid my_sort (iterator begin, iterator end,

comparator cmp)

while (! (j == p || cmp (*j, *p)))

--j;

if (j != p)

} iterator it = begin;

++it;

if (p != begin && p != it)

my_sort (begin, p, cmp);

it = p;

++it;

if (it != end && it != last)

my_sort (it, end, cmp);

}//比較器

class cmpint

};int main (void) ;

vectorvi (na, na + 8); //向量

listli (na, na + 8); //列表

my_sort (na, na + 8); //測試陣列

print (na, na + 8);

my_sort (vi.begin (), vi.end ()); //測試向量

print (vi.begin (), vi.end ());

my_sort (li.begin (), li.end (), cmpint ()); //測試列表

print (li.begin (), li.end ());

return 0;

}

歸併 高速分揀

我們都知道stl排序庫函式最常用的 sort v.begin biend 這是由於在以公升序。我一般不喜歡用乙個迭代器,我一般用這種格式。排序的陣列,替代指標迭代器。sort a,a n 公升序排序 sort a,a n,cpm int cmp type a,type b 這裡我們來手動實現歸併排序...

模板 函式模板

c 程式設計 資料結構與程式設計方法 例15.8 利用函式過載技術,求兩個整數 字元 浮點數或字串中的較大值,需要編寫4個函式larger。而c 通過提供函式模板,簡化了過載函式據的過程。include using namespace std template type,模板的形參,用於確定函式的形...

交換排序高速分揀

高速排序 quick sort 也是一種交換排序,它在排序中採取了分治策略。從待排序列中選取一元素作為軸值 也叫主元 將序列中的剩餘元素以該軸值為基準,分為左右兩部分。左部分元素不大於軸值,右部分元素不小於軸值。軸值終於位於兩部分的切割處。對左右兩部分反覆進行這種切割,直至無可切割。從高速排序的演算...