2017-02-28 5 views
0

私はbogosort関数を作りたいです。出力がfalseのたびにbogo関数を呼び出すとします。私はdo {bogo function block} while(sorted===false)ループで試してみましたが、一度だけループしました(arrは空の配列に変更されました)。最終的な目的は関数f.e bogo([1,5,3,2])を呼び出すことであり、ソートされた配列(変数shuffled)を出力する必要があります。javascriptのBogosort関数ループ

function bogo(arr) { 
 

 
    function shuffle(arr) { 
 
    var shuffled = []; 
 
    var rand; 
 
    while (arr.length !== 0) { 
 
     rand = Math.floor(Math.random() * arr.length) 
 
     shuffled.push(arr.splice(rand, 1)[0]); 
 
    } 
 
    return shuffled; 
 
    } 
 

 
    function sorted(shuffle) { 
 
    for (var i = 0; i < shuffle.length - 1; i++) { 
 
     if (shuffle[i] <= shuffle[i + 1]) { 
 
     continue; 
 
     } else { 
 
     return false; 
 
     } 
 
    } 
 
    return true 
 
    } 
 
    return sorted(shuffle(arr)); 
 
} 
 

 
console.log(bogo([1, 2]));

+0

あなた 'sorted'機能しません何か変更すると、配列はどのようにソートされますか?また、 'sorted'はtrueまたはfalseを返します。ソートされた配列ではありません。 –

+0

sortedの目的はbooleanを出力することです。その仮定では、while関数は現在シャッフルされた変数をとり、それを表示する必要がありますが、それは私の理論だけです。 – Felnyr

+0

あなたのコード中の唯一の 'while 'は' shuffle'です... 'sorted'が呼び出された時点で実行され終了しました –

答えて

2

あなたはそれがソートされるまでの配列をシャッフルしたい場合は、ループを必要としています。 ,とし、またはとすると、となります。この場合は意味があります。

あなたがシャッフル中にソース配列を破壊するので、あなたはそう、新しいシャッフル配列は、それぞれの時間を経過していることを確認する必要があります。

function bogo(arr) { 
 
    var shuffleCount = 0; 
 
    function shuffle(arr) { 
 
    var shuffled = []; 
 
    var rand; 
 
    while (arr.length !== 0) { 
 
     rand = Math.floor(Math.random() * arr.length) 
 
     shuffled.push(arr.splice(rand, 1)[0]); 
 
    } 
 
    return shuffled; 
 
    } 
 

 
    function sorted(shuffle) { 
 
    for (var i = 0; i < shuffle.length - 1; i++) { 
 
     if (shuffle[i] <= shuffle[i + 1]) { 
 
     continue; 
 
     } else { 
 
     return false; 
 
     } 
 
    } 
 
    return true 
 
    } 
 
    
 
    do { 
 
    shuffleCount++; 
 
    arr = shuffle(arr); 
 
    } while (!sorted(arr)) 
 
    
 
    return shuffleCount + ' | ' + arr.join(); 
 
} 
 

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

+0

@シャッフルするたびに初期のarrを使う解決法はありますか? – Felnyr

+0

* shuffle *関数を修正して、配列をシャッフルする必要があります。[* JavaScript配列をランダム化する方法(シャッフル)?*](http://stackoverflow.com/questions/2450954/how-to-randomize -shuffle-a-javascript-array) – RobG

関連する問題