问题描述:
现在有若干个红、白、蓝三种颜色的球随机排列成一条直线。现在我们的任务是把这些球按照红、白、蓝排序。
简述:我们需要得到一个中间值(白色)作为分界线,将两边分隔开。我们将此问题类比成:
给定一个数num,把比他小的放在左边,比他大的放在右边。
public static int[] helan(int arr[],int L,int R,int num) {
int less=L-1;
int more=R+1;
int cur=L;
while(cur<=more) {
if (num>arr[cur]) {
swap(arr,++less, cur++);
}else if (num<arr[cur]) {
swap( arr,--more, cur);
}else {
cur++;
}
}
return new int[] {less+1,R-1};
}
public static void swap(int[] arr,int a,int b) {
int t=arr[a];
arr[a]=arr[b];
arr[b]=t;
}