java中的锯齿状数组排序

时间:2015-09-24 05:08:30

标签: java sorting

最近我在面试中遇到了一个问题,我无法为这个问题制定逻辑。我有一个像

这样的数组

[ 1,'a',45,'h',56,'d',2,'t',6,'p' ]。如何排序这个数组?输出应该是这样的..

intArray = [1,2,6,45,56] 
charArray= ['a','d','h','p','t']

如果有人知道它的逻辑,请发表评论。这将是一个很大的帮助。

谢谢!

4 个答案:

答案 0 :(得分:2)

一种方法是将整数分开然后排序 -

Object[] objects = new Object[]{ 1,'a',45,'h',56,'d',2,'t',6,'p' };

List integers = new ArrayList<Integer>();
List characters = new ArrayList<Character>();

// Check and store integers and characters
// Doesn't validate and assumes you either have integers or characters
for(Object o : objects){
    if(o instanceof Integer){
        integers.add(o);                
    } else {                
        characters.add(o);
    }       
}

//Sort them separately
Collections.sort(integers);
Collections.sort(characters);

System.out.println(integers);
System.out.println(characters);

答案 1 :(得分:0)

  1. 首先将整数和字符分成不同的部分 数组通过检查其实例类型。
  2. 如果字符以ASCII格式存储(在java中以ASCII格式存储),您可以使用任何排序算法直接对它们进行排序,将每个值视为整数。
  3. 同样,您可以对整数数组应用任何排序算法。

答案 2 :(得分:0)

以下代码产生了所需的结果:

System.out.println(Arrays.toString(result.get(Integer.class).toArray()));
System.out.println(Arrays.toString(result.get(Character.class).toArray()));

查看结果:

public static class EnumerableExtensions
{
    public static bool AllUnique<TSource, TResult>(this IEnumerable<TSource> enumerable, 
        Func<TSource, TResult> selector)
    {
        var uniques = new HashSet<TResult>();
        return enumerable.All(item => uniques.Add(selector(item)));
    }
}

答案 3 :(得分:0)

以下是它的实现。我使用了两个for循环,这样我们就可以很容易地找出两个新子数组的长度,而不是用基数组初始化它; s长度。 我试过不使用除Arrays.sort()之外的任何内置方法。您也可以编写自己的代码来对这两个子数组进行排序。

    public static void main(String[] args) {
    Object[] array = { 1, 'a', 2, 'f', 5, 'b', 3 };

    int intLoc = 0;
    int charLoc = 0;
    for (int i = 0; i < array.length; i++) {
        if (array[i] instanceof Integer) {
            intLoc++;
        } else {
            charLoc++;
        }
    }
    int intArray[] = new int[intLoc];
    char charArray[] = new char[charLoc];

    for (int i = 0; i < array.length; i++) {
        if (array[i] instanceof Integer) {
            --intLoc;
            intArray[intLoc] = (int) array[i];
        } else {
            --charLoc;
            charArray[charLoc] = (char) array[i];
        }
    }

    Arrays.sort(intArray);
    Arrays.sort(charArray);
    System.out.println(Arrays.toString(intArray));
    System.out.println(Arrays.toString(charArray));

}