快速排序
去年大一下学数据结构的时候,学到了快速排序,记得当时怎么都不理解~!尤其不理解递归的实现。今天复习算法的时候发现并不是当时想的那么难,于是就代码实现了一下!我们都知道快排的效率高低取决于基准元素(这个可能不同的人叫法不一样,就是交换轴,我想你懂的,O(∩_∩)O~)的选择,一般我们选取第一个元素(或某一个),但是这样选取可能会导致快排的最低效率。还可以随机选取一个元素作为基准元素。
代码:
/* 主题:快速排序
* 作者:chinazhangjie
* 邮箱:chinajiezhang@gmail.com
* 开发语言: C++
* 开发环境: Virsual Studio 2005
* 时间: 2010.12.09
*/
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <ctime>
#include <windows.h>
using namespace std;
template <class T>
class Sort
{
public:
Sort (const vector<T>& vsortData, bool bsortMode)
: m_vsortData(vsortData), m_bsortMode(bsortMode)
{}
virtual void QSort()
{
__QSort (0, m_vsortData.size() - 1) ;
}
// display all element
void display () const
{
for (size_t i = 0; i < m_vsortData.size() / 10; ++ i)
{
copy (m_vsortData.begin() + 10 * i,
m_vsortData.begin() + 10 * i + 10,
ostream_iterator<int>(cout," "));
cout << endl ;
}
}
protected:
bool __compare (const T& rth, const T& lth)
{
return m_bsortMode ? (rth < lth) : (rth > lth) ;
}
virtual void __QSort (int istart, int iend)
{
if (istart < iend)
{
int isegLocation = __partition (istart, iend) ;
__QSort (istart, isegLocation - 1) ;
__QSort (isegLocation + 1, iend) ;
}
}
virtual int __partition(int istart, int iend)
{
int iinc =补充:综合编程 , 其他综合 ,