`

华为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[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] + " ");
		}
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics