2017-01-12 11 views
-2

私は次のタスクを手に入れましたが、残念ながら解決方法はわかりません。特定の機能を持つ配列を並べ替える

次関数既に実装している:

function array_swap(&$ar,$j) { ... } // changes element at position $j with element at position 0 
/* 
* Example: 
* $ar=array(3,1,5); 
* array_swap($ar, 2); // change element at position 2 with element at position 0 
* result is array(5,1,3); 
*/ 

1あなたは、あなたが(配列

3は、任意のループを使用することができるの要素を比較することができる機能

2 array_swap使用する必要があり、 foreach、while、など)

4配列を昇順に並べ替えることです。

誰かが私に助けやアイデアを与えることができますか?おそらく十分なアルゴリズム、私はコードできるように願っています。 :) これはアルゴリズムに関する質問です。以前は既存のアルゴリズムをチェックしましたが、類似するものは見つかりませんでした。

+1

..「あなたは配列を昇順にソートすることです...」と説明できますか? 2つの要素posを入れ替えた場合。 4とpos。 0とし、配列を並べ替えると結果は常に同じになる – Milan

+1

[配列とデータをPHPで並べ替えるにはどうすればいいですか?](http://stackoverflow.com/questions/17364127/how-cani- sort-arrays-and-data-in-php) – Icarus

+2

@Milanこれはおそらく、配列をソートする方法を理解するために、指定された関数を使用する必要があるアルゴリズムの質問です。 OPに、実際に何を思いついたのですか? – georaldc

答えて

0

これを解決する1つのヒントは、array_swap関数を2回使用することです。まず最初に見つかった最高値を最初のインデックスに配置し、それを配列の最後に移動します。あなたが正しい場所で最高の価値を持つようになったので、1つの指数を下げることができます。直前の最高値よりも高い次の値を見つけて、ダブルスワップをやり直すだけです。配列の先頭に到達するまで繰り返します。

上記はO(n^2)の解決策ですが、おそらくもっと有効な解決策があります。

+0

ありがとうございます!これにより、ソリューションを生成するコードを書く手助けができました。ここに私が書いたコードはあります:https://codeshare.io/GbvnnO –

+0

それは私が推測してもうまくいくでしょうが、array_search関数を使わずに、2番目の配列を使わずに逃げることができます。現在の最高値と、それを次に挿入する必要のあるインデックスを追跡する必要があります – georaldc

+0

追加のストレージを使用せずに、オーバーヘッドを追加する他の組み込み関数を使用せずに配列を並べ替えるアルゴリズムは次のとおりです。それはjavascriptにありますが、PHPに翻訳するのは簡単です。いくつかのコメントを追加しました。 https://jsfiddle.net/georaldc/nmd8h2f8/ – georaldc

関連する問題