题目:数组排序,正数在左从大到小,负数在右从小到大
题目:数组排序,正数在左从大到小,负数在右从小到大
输入:3,4,1,2,-1,-4,-3,-2
输出:4,3,2,1,-4,-3,-2,-1
可以使用快排,实现cmp函数即可
template <typename T>
int cmp(T a, T b) {
if (a<0 && b<0) {
return b - a;
} else {
return a - b;
}
}
//降序排列
template <typename Comparable>
int partition3(vector<Comparable>& v, int left, int right) {
if (left >= right) return left;
int i = left, j = right;
Comparable pivot = v[left];
while (i < j) {
while (i < j && !(cmp(v[j], pivot) > 0)) j--;
v[i] = v[j];
while (i < j && cmp(v[i], pivot) > 0) i++;
v[j] = v[i];
}
v[i] = pivot;
return i;
}
template <typename Comparable>
void quicksort3(vector<Comparable>& v, int left, int right) {
if (left >= right) return;
int mid = partition3(v, left, right);
quicksort3(v, left, mid - 1);
quicksort3(v, mid + 1, right);
}