package com.cisco.www.sort;
public class NetherlandsFlag {
public static int[] partition(int[] arr,int L, int R,int num){
/**
*
*/
int less = L-1 ;
int more =R+1;
int cur = L;//使用index来进行遍历
//current指针小于more指针
while (cur<more){
if(arr[cur]<num){
//如果小于,就将小于区域右移一位,然后交换
//就是把++less位置和cur位置交换一下,然后cur向后移动一位
//当前数和小于区域的下一个数进行交换,然后小于区域扩一个位置,然后cur跳下一个
swap(arr,++less,cur++);
}else if(arr[cur]>num){
//如果小于num,就将大于区域左移一位,然后交换
//将--more和当前位置的数进行交换,即将大于区域的前一个位置的数进行交换
swap(arr,--more,cur);
}else {
//如果当前数等于num的话,那么当前数不做任何操作,将当前指针向下移动
cur++;
}
}
//返回=num的区域
return new int[]{less+1,more-1};
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] =temp;
}
}