2015-09-24 156 views
0

最近我在面試中遇到了一個問題,我無法爲這個問題製作邏輯。我有一個像Java中的鋸齒陣列排序

[ 1,'a',45,'h',56,'d',2,'t',6,'p' ]。如何排序這個數組?輸出應該以這種方式..

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

如果有人知道它的邏輯請評論。這將是一個很大的幫助。

謝謝!

+0

它是'Array'還是'ArrayList'? – Satya

+0

原始數組如何存儲在數組中? –

+0

@Satya,NamanGala,這很重要嗎?這是一個關於排序異構元素的問題。我認爲底層數據結構的細節並不重要。在所有采訪中,我已經完成了僞代碼。 – aioobe

回答

0
  1. 首先,通過檢查它的實例類型分隔整數和字符爲不同的 陣列。
  2. 如果字符以ASCII形式存儲(在java中它以ASCII形式存儲),您可以使用任何排序算法直接對它們進行排序,將每個值僅視爲整數。
  3. 同樣,你可以在整數數組上應用任何排序算法。
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); 
0

下面的代碼產生所期望的結果:

import static java.util.stream.Collectors.*; 

final Map<Class<?>, Set<Object>> result = Stream.of(array) // 
     .collect(// 
       groupingBy(x -> x.getClass(), // 
         mapping(x -> x, toCollection(TreeSet::new)))); 

,以查看結果:

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

下面是它的實施。我使用了兩個for循環,以便我們可以輕鬆找出兩個新的子數組的長度,而不是用基數組的長度初始化它。 我試過不使用除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)); 

}