A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 妳的微笑❤ 中级黑马   /  2015-10-7 22:23  /  685 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

随机给出一个数组,要求你把越靠近50的数往左排;
        (给大家提示一下思路:随机的一个数组?那么数组中的每个元素肯定都有大有小。
        这个数组的每个元素都小于50怎么办?
        都大于50呢?
        介于中间呢?)

        思路:
                1:如果数组的每个元素都比50大?
                2:如果数组的每个元素都比50小?
                3:如果数组里面有的元素比50大?有的元素比50小呢?

评分

参与人数 1黑马币 +5 收起 理由
七七七七 + 5 神马都是浮云

查看全部评分

13 个回复

倒序浏览

        public static void main(String[] args) {

                int[] arr = { 1, 2, 4, 7, 9, 12, 2, 3, 4, 89, 100, 105, 88, 50, 49, 48,
                                48, 47, 99, 60, 40, 30, 70 };

                // int[] arr= {1,4,5,7,8,22,44};
                arr = sort50(arr);

                System.out.println(Arrays.toString(arr));

        }

        public static int[] sort50(int[] arr) {
                // 从小到大排
                Arrays.sort(arr);

                /*
                 * 如果数组里面所有的数都大于50
                 */
                if (arr[1] >= 50) {
                        return arr;
                        /*
                         * 如果数组里面所有的数都小于50
                         */
                } else if (arr[arr.length - 1] <= 50) {
                        int[] arrtemp = new int[arr.length];
                        for (int i = 0; i < arr.length; i++) {
                                arrtemp[arr.length - 1 - i] = arr[i];
                        }

                        return arrtemp;
                        /*
                         * 如果数组里面有大于50的也有小于50的
                         */
                } else {

                        // 外循环控制次数
                        for (int x = 0; x < arr.length - 1; x++) {
                                // 内循环控制每一次的比较过程
                                /*
                                 * 第一次,所有元素都参与比较,也就是0个元素不参与。 第二次,有1个元素不用参与。 第三次,有2个元素不用参与。 ...
                                 */
                                // -1是为了防止索引越界
                                // -x是为了减少比较的次数
                                for (int y = 0; y < arr.length - 1 - x; y++) {
                                        if (Math.abs(arr[y] - 50) > Math.abs(arr[y + 1] - 50)) {
                                                // 数据交换
                                                int temp = arr[y];
                                                arr[y] = arr[y + 1];
                                                arr[y + 1] = temp;
                                        }
                                }
                        }

                        /*// 选择排序法
                        for (int i = 0; i < arr.length - 1; i++) {
                                for (int j = i + 1; j < arr.length; j++) {
                                        if (Math.abs(arr[i] - 50) > Math.abs(arr[j] - 50)) {
                                                int temp = arr[j];
                                                arr[j] = arr[i];
                                                arr[i] = temp;
                                        }
                                }
                        }*/

                }
                return arr;
        }


分享答案!!!!大家参考
回复 使用道具 举报
首先这题 以什么标准排序 往左排 那么什么为原点不说 其次最后要求什么 输出是什么也不明确 是输出往左排的数呢 还是输出个数还是什么 不明确
连问题都不明确 做的题也都是仁者见仁智者见智
我是感觉出这题的面试官 不属于严谨的人
回复 使用道具 举报
Cloud丶 发表于 2015-10-7 22:33
首先这题 以什么标准排序 往左排 那么什么为原点不说 其次最后要求什么 输出是什么也不明确 是输出往左排的 ...

这是老师的面试题,听他说这是总经理出的
回复 使用道具 举报
谢谢分享
回复 使用道具 举报

客气客气
回复 使用道具 举报
第一个if里面判断的不是应该是arr[0]吗?
回复 使用道具 举报
说实话,我没看懂这道题目。越靠近50的数往左排这是啥意思?能不能这样,再定义一个等效的数组,存入这些元素与50的差呢?再根据差值进行同时操作两个数组进行排序呢。
回复 使用道具 举报
既然比较的是与50的差的绝对值,比50大或小没有规定,那就好办了
其实,我觉得普通的排序题也是比较数字和无限大或无限小的差
回复 使用道具 举报
学习学习
回复 使用道具 举报
asdsy222 发表于 2015-10-7 22:49
这是老师的面试题,听他说这是总经理出的

我是觉得 大致意思他肯定知道 但是绝对不是完全说出来 少了部分条件
回复 使用道具 举报
C威 中级黑马 2015-10-8 21:50:34
12#
与50相减绝对值越小就越靠近
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
与50做差的绝对值越小就往前放呗,如果绝对值相等,再用普通排序,搞不清楚为什么要考虑比50大,比50小是为什么?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马