2017-07-06 66 views
-2

我要創建一個函數,3個數字。該函數應該返回一個包含數字的數組,從最小到最大。到目前爲止,我有這個。我知道這是不正確的,但這是一個開始。我也不使用本地函數。任何人都可以給我一些提示嗎?感謝任何幫助。排序三個數字陣列從最小到最大

function leastToGreatest (num) { 
     var array = []; 
     var num1 = 0; 
     var num2 = 0; 
     var num3 = 0; 
     for (var i = 0; i < num.length; i++) { 
      if(num[i] < num[i] && num[i] < num[i]) { 
        num[i] = num1; 
        array.push(num1); 
      } 
      else if(num[i] > num[i] && num[i] < num[i]) { 
      num[i] = num2; 
      array.push(num2); 
      } 
      else if(num[i] > num[i] && num[i] > num[i]) 
      num[i] = num3; 
      array.push(num3); 
      } 
      return array; 
    } 
    leastToGreatest(2,1,3); 
+3

這裏有[Array.prototype.sort](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) – MinusFour

+1

你知道'num [i]'不能和'num [i]'不同,不是嗎? ..這意味着你的所有條件都會導致錯誤,並且在每個循環中你都會將'num3'推向數組。 –

+0

@華盛頓格德斯耶,我知道。這是一種只是僞代碼寫出來的東西 – padawan07

回答

1

我建議使用兩個for循環來解決這個問題。例如,

function sortArray(array) { 
 
    var temp = 0; 
 
    for (var i = 0; i < array.length; i++) { 
 
    for (var j = i; j < array.length; j++) { 
 
     if (array[j] < array[i]) { 
 
     temp = array[j]; 
 
     array[j] = array[i]; 
 
     array[i] = temp; 
 
     } 
 
    } 
 
    } 
 
    return array; 
 
} 
 

 
console.log(sortArray([3,1,2]));

有了這個功能,無論數組是什麼規模,它會永遠排序。

你的功能無法正常工作(這是由@WashingtonGuedes說明)的原因是,你是比較每次都相同的值。正如他們所說,你將到達最後一條語句和接收兩個false的,這會導致您測試false所有三個if語句。那麼你的返回數組將是空的。

一個建議是沒有硬編碼的三個值,因爲你所做的一切,而是麻痹大意,讓程序做艱苦的工作。至於把我的代碼片段,您可以輸入任意長度的數組,它會進行排序,而不是在哪裏長度爲3

+0

@WashingtonGuedes OP顯然是要求一個手寫的函數,而不是本地函數,正如問題中所述。 –

+0

@WashingtonGuedes但我同意糾正OP,將編輯帖子反映出來。 –

+0

@WashingtonGuedes啊,糾正。你對OP的問題的第一個評論也是錯誤的,因爲沒有'if'語句返回true,因此沒有被執行,'array'空着,就像它開始。 –

0

您的代碼,因爲它是現在目前是因爲您本身比較了一些不起作用,所以它將永遠是平等的(導致你的排序無所事事)。要進行工作排序,您可以修復此問題或使用array.prototype.sort

+0

是的,我知道這是錯的。我說過。這只是我寫出來的僞代碼。我是JS新手。我怎樣才能比較數組中的數字而不使用本地函數? – padawan07

0

下面是這一個有趣的小變化:

var sortingFunction = function(){ 
 
    console.log([].slice.apply(arguments).sort(function(a, b) { return a - b; })); 
 
} 
 

 

 
sortingFunction(3,2,5,1);

可以在儘可能多的號碼傳遞,只要你想,不是隻有三個。如果你想將其限制在3,你可以在功能測試:

var sortingFunction = function(){ 
 
    var values = [].slice.apply(arguments); 
 
    if(values.length === 3) { 
 
    console.log(values.sort(function(a, b) { return a - b; })); 
 
    } 
 
    else 
 
    { 
 
    console.log('you didn\'t pass in three values'); 
 
    } 
 
} 
 

 

 
sortingFunction(3,2,5,1); 
 

 

 
sortingFunction(3,31,1);

+0

哎呦,很好的捕捉和調整 –

0

如果你只是想安排從最小到最大的數字數組,你可以使用sort()方法使用以下參數:

array.sort(function(a,b){return(a-b)}); 

var array = [12,7,18,1]; 
 
array.sort(function(a,b){return (a-b)}); 
 
console.log(array); //Array should be arranged from least to greatest

0

如果它只有三個要排序的項目,你可以很容易地與三個比較和互換做到這一點:

if (num[0] > num[1]) 
{ 
    // swap num[0] and num[1] 
    temp = num[0]; num[0] = num[1]; num[1] = temp; 
} 
if (num[0] > num[2]) 
{ 
    // swap num[0] and num[2] 
    temp = num[0]; num[0] = num[2]; num[2] = temp; 
} 

// at this point, num[0] contains the smallest of the three numbers 

if (num[1] > num[2]) 
{ 
    // swap num[1] and num[2] 
    temp = num[1]; num[1] = num[2]; num[1] = temp; 
} 

// your three items are sorted 

這是很容易通過手來證明是正確的。將數字1,2和3寫在小紙片上,按隨機順序排列,然後執行上述步驟。無論你以什麼順序開始,這將對這三個項目進行排序。

明白,上面只適用於三個項目。如果你想要一種方法來分類任何數量的項目,那麼你會想要使用內置的排序方法。