【题目】难度:1星
给定一个整数数组,给定一个值K,这个值在原数组中一定存在,要求把数组中小于K的元素放到数组的左边,大于K的元素放到数组的右边, 等于K的元素放到数组的中间,最终返回一个整数数组,其中只有两个值,分别是等于K的数组部分的左右两个下标值。
(把一组数据按一个标志分成三份,左边的都小于标志数,中间的都等于标志数,右边的都大于标志数)
【代码】
package test;
import java.util.*;
public class Main{
public static void main(String[] args){
int[] arr= {1,6,3,5,6,7,6,9,2,4,6,8};
sort(arr,4);
System.out.println(Arrays.toString(arr));
}
public static void sort(int[] arr, int tar){
//注意这里的设定,规定左右索引为-1和len
int min = -1;
int max = arr.length;
int i = 0;
while (i<max){
if(arr[i]<tar) {
swap(arr,i,min+1);
min++;
i++;
}else if(arr[i]>tar) {
swap(arr,i,max-1);
max--;
}else {
i++;
}
}
}
public static void swap(int[] arr, int i,int j) {
int x = arr[i];
arr[i] = arr[j];
arr[j] = x;
}
}