日期:2014-05-20  浏览次数:20739 次

数组排序问题(来着有分)
有一个整形数组,请按最大、最小、次大、次小.....的顺序排列,我想出了下面的想法,别人说我一个数组就够了,干嘛整出来两个,如果有一万个数据呢?有谁还有别的想法,希望大家畅所欲言,谢谢,来着酌情给分的。

------解决方案--------------------
一个数组不好整哇, 冒泡排序(从大到小) 然后取第一(list.get(i))和最后一个(list.get(list.size()-1-i)), 添加到一个新数组.
------解决方案--------------------
楼主的算法很好啊,一个数组确实OK了。

其实就是一种有规律的交换嘛~鼓励!
------解决方案--------------------
要是面试题的话,我会用一次反向的冒泡排序实现,
根据奇数次和偶数次,判断每次取最大和最小值。

我感觉面试的时候,思路清析,代码要简洁
------解决方案--------------------
先排序,再按头尾的顺序依次放到另一个数组中
------解决方案--------------------
楼主想要弄排序,建议看一下相关的算法,如快速排序,堆排序,合并排序,研究研究各个算法的有点,再也不怕你同学说了!
------解决方案--------------------
Java code

public class Test {
    public static void main(String[] args) {
        int[] array = { 5, 2, 6, 4, 3, 1, 8, 10, 9, 7 };

        for (int i = 0; i < array.length; i++) {
            int flag = (i + 1) % 2;
            int tmp = array[i];
            int point = i;
            for (int j = i; j < array.length; j++) {
                if (flag != 0) {
                    if (array[j] > tmp) {
                        tmp = array[j];
                        point = j;
                    }
                } else {
                    if (array[j] < tmp) {
                        tmp = array[j];
                        point = j;
                    }
                }
            }
            if (i != point) {
                array[i] = array[i] ^ array[point];
                array[point] = array[i] ^ array[point];
                array[i] = array[i] ^ array[point];
            }
        }
        System.out.println(Arrays.toString(array));
    }
}

------解决方案--------------------
学习啊,好厉害
------解决方案--------------------
Java code
package com.cn.sort;

public class FindLastTwo {
    public static void main(String[] args) {
        int[] a = new int[]{9,10,2,1};
        int lastTwoNum = findLastTwo(a);
        System.out.println(lastTwoNum);
    }
    //时间复杂度为O(n)
    private static int findLastTwo(int[] a) {
        int min = Integer.MAX_VALUE;
        int lastTwo = Integer.MAX_VALUE;
        if (a.length >= 2) {
                if (a[0] < a[1]) {
                    min = a[0];
                    lastTwo = a[1];
                } else {
                    min = a[1];
                    lastTwo = a[0];
                }
        } else {
            return Integer.MIN_VALUE;
        }
        for (int i = 2; i < a.length; i++) {
            if (a[i] < min) {
                lastTwo = min;
                min = a[i];
            } else if (a[i] < lastTwo) {
                lastTwo = a[i];
            }
        }
        if (min <= lastTwo) {
            return lastTwo;
        } else  {
            return min;
        }
    }
}

------解决方案--------------------
学习了
------解决方案--------------------
冒个泡
------解决方案--------------------
顶一下
------解决方案--------------------
牛人啊~
------解决方案--------------------
学习了
------解决方案--------------------
冒泡的精髓呀,学习了
------解决方案--------------------