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

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

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

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

评分

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

查看全部评分

13 个回复

正序浏览
与50做差的绝对值越小就往前放呗,如果绝对值相等,再用普通排序,搞不清楚为什么要考虑比50大,比50小是为什么?
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
C威 中级黑马 2015-10-8 21:50:34
12#
与50相减绝对值越小就越靠近
回复 使用道具 举报
asdsy222 发表于 2015-10-7 22:49
这是老师的面试题,听他说这是总经理出的

我是觉得 大致意思他肯定知道 但是绝对不是完全说出来 少了部分条件
回复 使用道具 举报
学习学习
回复 使用道具 举报
既然比较的是与50的差的绝对值,比50大或小没有规定,那就好办了
其实,我觉得普通的排序题也是比较数字和无限大或无限小的差
回复 使用道具 举报
说实话,我没看懂这道题目。越靠近50的数往左排这是啥意思?能不能这样,再定义一个等效的数组,存入这些元素与50的差呢?再根据差值进行同时操作两个数组进行排序呢。
回复 使用道具 举报
第一个if里面判断的不是应该是arr[0]吗?
回复 使用道具 举报

客气客气
回复 使用道具 举报
谢谢分享
回复 使用道具 举报
Cloud丶 发表于 2015-10-7 22:33
首先这题 以什么标准排序 往左排 那么什么为原点不说 其次最后要求什么 输出是什么也不明确 是输出往左排的 ...

这是老师的面试题,听他说这是总经理出的
回复 使用道具 举报
首先这题 以什么标准排序 往左排 那么什么为原点不说 其次最后要求什么 输出是什么也不明确 是输出往左排的数呢 还是输出个数还是什么 不明确
连问题都不明确 做的题也都是仁者见仁智者见智
我是感觉出这题的面试官 不属于严谨的人
回复 使用道具 举报

        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;
        }


分享答案!!!!大家参考
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马