patition: 比目标值小的在左边,比目标值大的再右边,相等的再中间。 两侧的都是乱序
#include<iostream>
using namespace std;
void partition(int arr[],int L, int R);
void NB_partition(int arr[],int L, int R);
void swap(int arr[], int i, int j);
void show(int arr[], int length);
int main(){
int arr[] = {2,3,1,4,8,7,3};
//输入左右边界的下标
NB_partition(arr,0,6);
show(arr,7);
return 0;
}
void NB_partition(int arr[],int L, int R){
int less = L-1;
int more = R;
while(L<more){
if(arr[L]<arr[R]){
swap(arr, ++less, L++);
}else if(arr[L]>arr[R]){
swap(arr, --more, L);
}else{
L++;
}
}
swap(arr, more, R);
// show(arr, R-L+1);
}
void swap(int arr[], int i, int j){
int temp = arr[i];
arr[i]= arr[j];
arr[j] = temp;
}
void show(int arr[], int length){
int i=0;
while(i<length){
cout << arr[i];
i++;
}
}