/* ******* QSort.cpp **********
********* 快速排序实现 ********** */
#include "stdafx.h"
#include <list>
using namespace std;
template <typename T>
void Sort(T* a, int n)
{
if (n <= 1)
{
return;
}
if (n == 2)
{
T& left = a[0];
T& right = a[1];
if (left > right)
{
swap(left, right);
}
return;
}
swap(*a, a[n>>1]);
T* L = a + 1;
T* R = a + n - 1;
T v = a[0];
while(L < R)
{
while(L < R && *L < v)L++;
while(R > a && *R >= v)R--;
if (L < R)
{
swap(*L, *R);
}
}
swap(*a, *R);
Sort(a, R - a);
Sort(R + 1, n - 1 - (R - a));
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[10];
for (int i = 0; i < 10; i++)
{
a[i] = 10 - i;
}
Sort<int>(a, 10);
return 0;
}