快排
#include <iostream>
using namespace std;
int divideNumber (int array[], int left, int right) {
int base = array[left];
while (left < right) {
while (left < right && array[right] >= base) {
right--;
}
if (left == right) {
break;
} else {
array[left] = array[right];
}
while (left < right && array[left] <= base) {
left++;
}
if (left == right) {
break;
} else {
array[right] = array[left];
}
}
array[left] = base;
return left;
}
void quickSort (int array[], int left, int right) {
if (left < right) {
int divide = divideNumber(array, left, right);
quickSort(array, left, divide - 1);
quickSort(array, divide + 1, right);
}
}
int main(int argc, const char * argv[]) {
// insert code here...
int array[] = {9,8,7,6,5,4,3,2,1};
quickSort(array, 0, 8);
for(int i = 0; i < 9; i++) {
cout << array[i] << " ";
}
cout << endl;
return 0;
}
数组中第 k 大的数字
#include <iostream>
using namespace std;
int divideNumber (int array[], int left, int right) {
int base = array[left];
while (left < right) {
while (left < right && array[right] >= base) {
right--;
}
if (left == right) {
break;
} else {
array[left] = array[right];
}
while (left < right && array[left] <= base) {
left++;
}
if (left == right) {
break;
} else {
array[right] = array[left];
}
}
array[left] = base;
return left;
}
int numberK(int array[], int left, int right, int k) {
int index = divideNumber(array, left, right);
if (index == k) {
return index;
} else if (k > index) {
return numberK(array, index + 1, right, k);
} else {
return numberK(array, left, index - 1, k);
}
}
int main(int argc, const char * argv[]) {
int array[] = {1,2,3,4,5,6,7,8,9};
cout << numberK(array, 0, 8, 5) << endl;
return 0;
}