问题 - 您将获得一个仅包含0和1和2的数组 编写一个函数来对这个数组进行排序。
如果我输入2 2 2 1 1 1 0 0 0
输出即将到来0 2 2 2 2 2 2 2 2
。
请参阅目前为止编写的以下代码
import java.util.Scanner;
public class SortZeroOneTwo {
public static void sortZeroOneTwo(int[] input) {
int i=0;
int j=input.length-1;
while(i<j) {
if(input[i]==2) {
for(int k=i+1;k<input.length;k++) {
input[k-1] = input[k];
}
input[j] = 2;
j--;
}
i++;
}
i=0;
j=input.length-1;
while(i<j) {
if(input[j]==0) {
for(int k=i;k<j;k++) {
input[k+1] = input[k];
}
input[i]=0;
i++;
}
j--;
}
}
public static void printArray(int[] input) {
System.out.println("The required sorted array is : ");
for(int i=0;i<input.length;i++) {
System.out.print(input[i] + " ");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Enter the length of the array");
Scanner s = new Scanner(System.in);
int n = s.nextInt();
int[] array = new int[n];
for(int i=0;i<array.length;i++) {
System.out.println("Enter the next array element");
array[i] = s.nextInt();
}
sortZeroOneTwo(array);
printArray(array);
}
}
答案 0 :(得分:0)
试试这个:
private static final int MAX = 2;
public static void sortZeroOneTwo(int[] input) {
int []values = new int[MAX+1];
for (int element: input) {
values[element]++;
}
int j = 0;
for (int i = 0 ; i < values.length; i++){
for (int k = 0; k < values[i]; k++){
input[j++] = i;
}
}
}
public static void main(String[] args) {
int[] input = {2,2,2,1,1,1,0,0,0};
sortZeroOneTwo(input);
for (int element : input) {
System.out.print(element+" ");
}
System.out.println();
}