// MergeSort - 归并排序 - 开始
template<typename Data>
void Merge(Data *a, int s, int m, int e, bool (*cmp)(Data, Data)) {
Data tmp[e-s+1];
int pb = 0, p1 = s, p2 = m+1;
while(p1 <= m && p2 <= e)
tmp[pb++] = cmp(a[p1], a[p2]) ? a[p1++] : a[p2++];
while(p1 <= m) tmp[pb++] = a[p1++];
while(p2 <= e) tmp[pb++] = a[p2++];
for(int i=0; i<pb; i++) a[s+i] = tmp[i];
}
template<typename Data>
void MergeSort(Data *a, int s, int e, bool (*cmp)(Data, Data)) {
if(s < e) {
int m = (s+e)/2;
MergeSort(a, s, m, cmp);
MergeSort(a, m+1, e, cmp);
Merge(a, s, m, e, cmp);
}
}
// MergeSort - 归并排序 - 结束
//////////////////////////////////////////////////////////////////////////////////////////
// QuickSort - 快速排序 - 开始
template<typename Data>
int Partion(Data *a, int left, int right, bool (*cmp)(Data, Data)) {
Data pivot = a[left];
while(left < right) {
while(left < right && cmp(pivot, a[right])) --right;
if(left < right) a[left++] = a[right];
while(left < right && cmp(a[left], pivot)) ++left;
if(left < right) a[right--] = a[left];
}
a[left] = pivot;
return left;
}
template<typename Data>
void QuickSort(Data *a, int left, int right, bool (*cmp)(Data, Data)) {
if(left < right) {
int pivotpos = Partion(a, left, right, cmp);
QuickSort(a, left, pivotpos-1, cmp);
QuickSort(a, pivotpos+1, right, cmp);
}
}
// QuickSort - 快速排序 - 结束
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。