给定一个整数数组,给定一个值K,这个值在原数组中一定存在,要求把数组中小于K的元素放到数组的左边,大于K的元素放到数组的右边,等于K的元素放到数组的中间,最终返回一个整数数组,其中只有两个值,分别是等于K的数组部分的左右两个下标值。
思路:设定一个小于区less,跟大于区more,以及一个指向数组L位置的下标cur(给定数组区间的最前下标),当数组元素小于给定值时,交换数组元素跟小于区的下一个元素,下标cur+1。当数组元素大于给定值的时候,交换数组元素跟大于区的上一个元素,此时由于大于区的上一个元素元素并不知道跟给定值的关系。所以下标cur不做处理。当数组元素跟给定值相等时,cur+1。
package ZuoShenJiChu;
import java.util.Arrays;
public class Demo2 {
public static void main(String[] args) {
int arr[]={5,3,4,1,5,7,6,1,5,2};
int a[]=partition(arr,0,arr.length-1,5);
System.out.println(Arrays.toString(a));
}
public static int [] partition(int arr[],int L,int R,int num)
{
int less=L-1;
int more=R+1;
int cur=L;
while (cur<more)
{
if(arr[cur]<num)
{
swap(arr,++less,cur++);
}else if (arr[cur]>num){
swap(arr,--more,cur);
}else {
cur++;
}
}
return new int[]{less+1,more-1};
}
public static void swap(int []arr,int i,int j)
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}