问题:给定一个数组arr和一个数字num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。
要求额外空间复杂度O(1),时间复杂度O(N)
#include <iostream>
using namespace std;
void Swap(int arr[], int i, int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
int partition(int arr[], int L, int R, int num){
int les = L - 1;
int more = R + 1;
int cur = L;
while (cur < more){
if (arr[cur] < num){
Swap(arr, ++les, cur++);
}
else if (arr[cur] > num){
Swap(arr, --more, cur);
}
else{
cur++;
}
}
cout << '[' << les + 1 << ',' << more - 1 << ']' << endl;
}
int main(){
int arr[100] = {5,3,6,5,3,5,8,9};
int num = 5;
int L = 0, R = 7;
partition(arr, L, R, num);
}