划分(快排基础)

返回应该插入的位置,

#include <iostream>

using namespace std;

void swap(int &a, int &b) {
    int tmp;
    tmp = a;
    a = b;
    b = tmp;
}

int partitionIt(int vt[], int left, int right, int pivot) {

    int leftPtr = left - 1;
    int rightPtr = right + 1;

    while (true) {
        while ((right > leftPtr) && (vt[++leftPtr] < pivot));
        while ((left < rightPtr) && (vt[--rightPtr] > pivot));
        
        if (leftPtr >= rightPtr) {
            break;
        }
        else {
            swap(vt[leftPtr], vt[rightPtr]);
        }
    }
    return leftPtr;
}

int main(void) {
    int a[] = { 149, 192, 47, 152, 159, 195, 61, 66, 17, 168, 118, 64, 27, 80, 30, 105 };

    for (int i = 0; i < 15; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    
    cout << endl;

    int j = partitionIt(a, 0, 15, 67);

    for (int i = 0; i < 15; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    cout << j << endl;

    return 0;
}

若有两个相同元素可能有些问题, 待解决

int main(void) {
    int a[] = { 149, 66, 192, 47, 152, 159, 195, 61, 66, 17, 168, 118, 64, 27, 80, 30, 105 };

    for (int i = 0; i < 17; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    
    cout << endl;

    int j = partitionIt(a, 0, 16, 66);

    for (int i = 0; i < 17; i++) {
        cout << a[i] << " ";
    }
    cout << endl;
    cout << j << endl;

    return 0;
}

猜你喜欢

转载自www.cnblogs.com/hesper/p/10443041.html