返回应该插入的位置,
#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;
}