华为2012秋季校招机试题-数组处理(题目源自网络)
程序员文章站
2022-05-03 12:13:45
...
数组处理
给定一个数组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[n]; // 用于存放输入数据 int[] output = new int[n]; // 用于存放输出数据 // 将字符串数组转换为int数组 for (int i = 0; i < input.length; i++) { input[i] = Integer.parseInt(strArr[i]); } // 直接对输入数据进行排序,得到由小到大的数据 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[flag] = input[i]; 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[i] + " "); } } }