2015-10-15 26 views
0
int[] array = {1,1,0,1,2,2,0,0}; 
int firstNumber = 1;// dynamic can be 0 or 1 or 2 
int numberOfOccurances = 0; 

//Basic sort functionality 
for(int i = 0 ; i< array.length; ++i) 
{ 
    if(array[i] == firstNumber) 
    { 
     numberOfOccurances++; 
    } 
    for(int j = i+1; j<array.length; ++j) 
    { 
     if(array[j] < array[i]) 
     { 
      int temp = array[i]; 
      array[i] = array[j]; 
      array[j] = temp; 
     } 
    } 
} 
int[] requiredArray= new int[array.length]; 
for(int i = array.length-1 ; i >= 0; i--) 
{ 
    if(array[i] != firstNumber) 
    requiredArray[i] = array[i]; 

} 
for(int i =0;i<array.length;i++) 
{ 
    if(i<numberOfOccurances) 
    requiredArray[i]= firstNumber; 
} 

//Print Output 
for (int i = 0; i<requiredArray.length; i++) 
System.out.print(requiredArray[i] + " "); 

輸出:1 1 1 1 0 0 2 2排序陣列(第一數量將被動態地選擇和剩餘陣列應該被排序升序)

我是能夠得到所希望的輸出,但我米不知道這是否是解決我的問題的最佳方法?

+1

問題是? – svs

+0

@svs我想知道是否有更好的方法來解決它。 – Rajesh

+1

不完全確定,但在http://codereview.stackexchange.com/上提出這個問題不是更好嗎? –

回答

0

這是一個簡單的解決方案。 更改號碼,如果: - 另一種是firstNumber - 對方是未成年人而不是第一個數字

int[] array = {1,1,0,1,2,2,0,0,3,2,1,0,0,1,2,3,2,3}; 

    int firstNumber = 1, temp; 

    for(int i=0;i<array.length-1;i++) { 
     for(int j=i+1;j<array.length;j++) { 

      if((array[j] < array[i] && array[i]!=firstNumber) || array[j]==firstNumber) { 
       temp = array[i]; 
       array[i] = array[j]; 
       array[j] = temp; 
      } 
     } 
    } 
0

有一個更好的辦法。特別是,你的排序算法是

  1. 不復雜(O(n^2))最佳,看到知名的排序算法爲O(n * log n)替代品(https://en.wikipedia.org/wiki/Sorting_algorithm見歸併和快速排序爲流行的)。實際上,無論如何,你的語言的標準lib將包含一個好的實現。
  2. 工作在n元素仍然。如果你有很多「第一」,你實際上只需要m = n - number_of_first元素,並且可以在O(m * log m)中完成。

通常,第二點並不重要。如果是這樣,你可能會處理幾個不同的元素,然後它也將是一個好主意,使用更好的時間一樣強制性https://en.wikipedia.org/wiki/Counting_sort

忽略情況與幾個不同的元素,我建議你去看看數組一次,並將不是「firstNumber」的所有元素複製到另一個數組中。然後使用標準的排序算法對其他數組進行排序 - 最好是內置算法。

最後,你的輸出倍firstNumber之後的排序otherArray

0

取決於你的數字大小的內容,你可能要算一個數的每一次出現,並打印出號碼的數量你數過它的次數。這是一個O(n)算法。

arrayToBeSorted = {collection of numbers} 
firstNumber = arrayToBeSorted[0] 
countArray = new int[max(arrayToBeSorted)]; //everything defaults to 0 in most languages 
for i:= 0 -> N 
    countArray[arrayToBeSorted[i]]++; 

for i:= 0 ->countArray[firstNumber] 
    print(firstNumber) 

for i: = 0 ->countArray.length 
    if (i == firstNumber) 
     continue; 
    for j:= 0 -> countArray[i] 
     print(i)