华为2012秋季校招机试题-数组处理(题目源自网络)
数组处理给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上,
然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。
例如:
input[] = {3, 6, 1, 9, 7} output[] = {3, 7, 9, 6, 1};
input[] = {3, 6, 1, 9, 7, 8} output[] = {1, 6, 8, 9, 7, 3}
package com.liuhao;
import java.util.Arrays;
import java.util.Scanner;
public class ArraySort {
public static void main(String[] args) {
System.out.println("请输入数据,以空格间隔,以回车结束:");
Scanner scan = new Scanner(System.in);
// 由于不知道输入的元素个数,故只能先读入到字符串中,然后进行分割
String str = scan.nextLine();
String[] strArr = str.split(" ");
int n = strArr.length;
int[] input = new int; // 用于存放输入数据
int[] output = new int; // 用于存放输出数据
// 将字符串数组转换为int数组
for (int i = 0; i < input.length; i++) {
input = Integer.parseInt(strArr);
}
// 直接对输入数据进行排序,得到由小到大的数据
Arrays.sort(input);
int flag = n / 2; // 放初始值的位置
int j = 1; // 增量
boolean temp = true; // 用于判断是加增量,还是减增量
for (int i = n - 1; i >= 0 && flag >= 0 && flag < n; i--) {
output = input;
if (temp) {
flag -= j; // flag左移
} else {
flag += j; // flag右移
}
temp = !temp;
j++;
}
System.out.println("处理结果:");
for (int i = 0; i < output.length; i++) {
System.out.print(output + " ");
}
}
}
页:
[1]