给定一个数组input[] ,如果数组长度n为奇数,则将数组中最大的元素放到 output[] 数组 最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[] 数组中间两个位置偏右的那个位置上
2015-09-11 01:36
796 查看
然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。 例如: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} 1 import java.util.Arrays; public class Solution { /** 操作方法 */ public static int[] operate(int[] input) { int[] output = new int[input.length]; int k = input.length/2;//用为output的指针 quickSort(input,0,input.length-1); for (int i = 0; i < input.length; i++) { output[k] = input[i]; if (k < input.length/2) { k += i+1; } else { k -= i+1; } } return output; } /** 快速排序 */ private static void quickSort(int[] input, int left, int right) { if (left < right) { int pivot = partion(input, left, right); quickSort(input, left, pivot-1); quickSort(input, pivot+1, right); } } /** 大小分开的方法 */ private static int partion(int[] input, int left, int right) { int pivotVal = input[left]; while (left < right) { while (left < right && input[right] <= pivotVal) { --right; } input[left] = input[right]; while (left < right && input[left] >= pivotVal) { ++left; } input[right] = input[left]; } input[left] = pivotVal; return left; } public static void main(String[] args) { int input1[] = {3, 6, 1, 9, 7}; int input2[] = {3, 6, 1, 9, 7, 8}; System.out.println(Arrays.toString(operate(input1))); System.out.println(Arrays.toString(operate(input2))); } }
相关文章推荐
- 国内外免费PHP开源建站程序
- laravel blog 一
- PHP路由设置原理
- php通用防注入和XSS攻击全局过滤代码
- FTP安装
- PHP 鸟哥:我也曾经是“不适合”编程的人
- vsftp简单配置
- 留言板——列表分页
- DebugLog.php
- php怎么禁用eval函数
- Zend Guard Loader 6.0.0 支持PHP 5.4.x系列
- ThinkPHP缓存
- 中高级PHP开发者应该掌握哪些技术?
- 编译jrtplib和一些易忘记的点
- FtpClient 获取ftp文件列表
- cakephp 的事件系统(Getting to grips with CakePHP’s events system), 基于观察者模式
- 处理FTP上传成功推理
- php中urlencode空格变成+号解决方法
- Yii2文件上传
- RTP 包格式 详细解析 -- H264 nalu 封装rtp 方式。