对{1,0,0,2,2,1,0,2}进行排序
算法思路
如图以1为分届小于一的在1的左边,大于1的数在1的右边这样就可以进行三个数的排序。
算法思路:
1、当cur小于划分值的时候:当前数与小于区的下一个数做交换,并且小于区范围扩一、cur+1;
2、当cur等于划分值的时候:cur+1;
3、当cur大于划分值的时候,cur与大于区的前一个做交换,大于区域+1,cur不变。
include<iostream>
using namespace std;
void swap(int *arr,int a,int b) {
arr[a] = arr[a] ^ arr[b];
arr[b] = arr[a] ^ arr[b];
arr[a] = arr[a] ^ arr[b];
}
void Sort(int *arr,int L,int R,int p){
int left = L-1;
int right = R+1;
int index = L;
while(index<right){
if(arr[index]<p){
swap(arr,++left,index++);
}else if(arr[index]>p){
swap(arr,index,--right);
}else{
index++;
}
}
}
int main(){
int arr[8] = {1,0,0,2,2,1,0,2};
Sort(arr,0,7,1);
for(int i=0;i<8;i++){
cout << arr[i] << " ";
}
}