int partition(int data[], int lenth, int start, int end) { //assert(end < lenth); int index = RandonInRange(start, end); Swap(&data[index], &data[end]); int small = start - 1; for (index= start; index<end; ++index) { if (data[index] < data[end]) { ++small; if (small != index) { Swap(&data[small], &data[index]); } } } ++small; Swap(&data[small], &data[end]); return small; } void quikSort(int data[], int lenth, int start, int end) { if (start == end) { return; } int index = partition(data, lenth, start, end); if (index > start) { quikSort(data, index, start, index-1); } if (index < end) { quikSort(data, lenth - index - 1, index+1, end); } }
堆:
template<typename T>
void buildHeap(vector<T>&a, int i, int len)
{
int child;
T tmp;
for (tmp = a[i]; getleft(i) < len; i = child)
{
child = getleft(i);
if(child < len - 2 && a[child]<a[child+1])
{
++child;
}
if(a[child] > tmp)
{
a[i] = a[child];
a[child] = tmp;
}
else
{
break;
}
}
}
template<typename T>
void heapsort(vector<T>&a)
{
int len = a.size();
int i = (len-2)/2;
for (; i >= 0; --i )
{
buildHeap(a, i, len);
}
T tmp;
for (i = len-1; i >= 0; --i)
{
tmp = a[i];
a[i] = a[0];
a[0] = tmp;
buildHeap(a, 0, i);
}
}