2014-03-28 51 views
0

我有一個家庭作業,實質上是兩個數組必須被分類到一個。這有一個不合並然後排序的警告。換句話說,我必須同時通過這兩個數組,然後再從中排序第三個數組。對於如何在同一時間搜索兩個數組,並查找最低值並將其移至第三個數組,我感到有點困惑。嘗試合併兩個數組,同時排序到第三個

有人可以告訴我一個如何做這樣的事情的例子嗎?我很困惑。

謝謝大家。

以下是一些細節。

•兩個參數數組不應該因調用函數而改變。總的來說這是一個很好的做法。 •您不能簡單地附加兩個數組,然後對結果進行排序。相反,您應該依次檢查數組中的每個元素,以查看哪個元素更小。 •用適當的內容返回新創建的數組。 •執行算法的時間應該與兩個輸入數組中元素數量的總和成正比。

是的,數組是排序的,但我必須經過並找到兩個數組中的最小值,然後將它添加到第三個數組,然後是兩個數組中的第二個最低值,和和.....

+0

這兩個數組是否已經排序? –

+0

兩個輸入數組已經排序了嗎? [合併算法](https://en.wikipedia.org/wiki/Merge_algorithm)相當簡單 – Bergi

回答

-1

http://www.w3schools.com/jsref/jsref_concat_array.asp

,然後使用的.sort()方法,我不明白你的事實,你必須在同一都要經過2個陣列是什麼意思時間。

+0

查看已更新的問題。這可能是一個很好的方法,但在這裏特別禁止。 – 2014-03-28 02:20:28

+0

是的,我同意,但數組排序的事實只是張貼 – pj013

1

如果兩個陣列已經排序,並且您正在命令他們到一個空的陣列, 有比simplest-

function insorter(A, B){ 
    var C= [], LA= A.length, LB= B.length, i= 0, j= 0, k= 0; 
    while(i<LA && j<LB){ 
     while(A[i]<B[j]){ 
      C[k++]= A[i++]; 
     } 
     while(B[j]<= A[i]){ 
      C[k++]= B[j++]; 
     } 
    } 
    if(i<LA) C.splice(k, 0,A.slice(i)); 
    else if(j<LB) C.splice(k, 0,B.slice(j)); 
    return C; 
} 


var a= [10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49], 
b= [0, 3.5, 7, 10.5, 14, 17.5, 21, 24.5, 28, 31.5, 35, 38.5]; 
insorter(a, b); 
沒有快速的方法

/*返回的值:(陣列) 0, 3.5,7,10,10.5,13,​​14,16,17.5,19,21,22,24.5,25,28,28,31,31.5,34,35,37,38.5,40,43,46,49 */

相關問題