题目:数组排序,正数在左从大到小,负数在右从小到大

题目:数组排序,正数在左从大到小,负数在右从小到大

输入: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);
}
posted @ 2022-06-07 10:32  天下太平  阅读(91)  评论(0编辑  收藏  举报