1.荷兰国旗问题
定义:给定一个数组一个值target,将数组中按照<target,=target,>target分成三块区域,返回下标
public int[] flag(int[] nums,int target){
int left = -1
int right = nums.length
int help
for (int i = 0
if(nums[i]<target){
//将当前位置与<区后一个做交换,<区向后一位
help = nums[i]
nums[i] = nums[left+1]
nums[left+1] = help
left++
i++
}else if(nums[i]==target) i++
else {
//将当前位置与大于区前一个元素做交换,i不动
help = nums[i]
nums[i] = nums[right-1]
nums[right-1] = help
//将大于区起始下标向前一位
right--
}
}
int[] res = {left,right}
return res
}
2.快排
public void QuickSort(int[] nums,int left ,int right ){
if(left>right) return;
int i =left;
int j =right;
while (i!=j){
while(nums[j]>=nums[left] && j>i){
j--;
}
while (nums[i]<=nums[left] && j>i){
i++;
}
exchange(nums,i,j);
}
exchange(nums,left,i);
QuickSort(nums,left,i-1);
QuickSort(nums,i+1,right);
}
public void exchange(int[] nums,int i,int j){
int help = nums[i];
nums[i] = nums[j];
nums[j] = help;
}
}
```
```