2017-01-23 6 views
-1

私は、3つの値を使ってソートするソートアルゴリズム(または単なる方法?)の名前を調べようとしています。ソートアルゴリズムの名前は?

我々は3つの値から始め、アレイは、日付および位置の両方が同じことを可能にする、オブジェクト、位置、それがその位置に設定し、日付のIDに基づいて、分類すべきです。私の恐ろしい説明を許してください。私は例を挙げます。

私たちはどんな編集せずに、アレイは、私が第2の位置に最初のオブジェクトを移動させることであれば、それは

{id:2,pos:0,date:0} 
{id:1,pos:2,date:1} 
{id:3,pos:0,date:0} 
{id:4,pos:0,date:0} 
{id:5,pos:0,date:0} 
{id:6,pos:0,date:0} 
この順序を返します。この

{id:1,pos:0,date:0} 
{id:2,pos:0,date:0} 
{id:3,pos:0,date:0} 
{id:4,pos:0,date:0} 
{id:5,pos:0,date:0} 
{id:6,pos:0,date:0} 

ようになり、6つのポジションを持っています

ただし、第3のオブジェクトを第2の位置に移動する場所がある場合

{id:2,pos:0,date:0} 
{id:3,pos:2,date:2} 
{id:1,pos:2,date:1} 
{id:4,pos:0,date:0} 
{id:5,pos:0,date:0} 
{id:6,pos:0,date:0} 

posは変更されませんが、より高い日付の値に基づいて同じ番号の位置の前に並べられます。

現在ノートのID 2は、idはそれ

背後ID未満であるため、posと日付がまだ0であっても、数2の位置をとる1

{id:4,pos:1,date:3} 
{id:2,pos:0,date:0} 
{id:3,pos:2,date:2} 
{id:1,pos:2,date:1} 
{id:5,pos:0,date:0} 
{id:6,pos:0,date:0} 

位置に第4回オブジェクトを移動します

現在位置4

にID 5

{id:4,pos:1,date:3} 
{id:6,pos:2,date:4} 
{id:2,pos:0,date:0} 
{id:3,pos:2,date:2} 
{id:1,pos:2,date:1} 
{id:5,pos:0,date:0} 

位置2にID 6を移動させます

そして最後に、私は私の例では、与えられた任意の応答を支援願って位置6

{id:4,pos:1,date:3} 
{id:6,pos:2,date:4} 
{id:5,pos:4,date:5} 
{id:3,pos:2,date:2} 
{id:1,pos:2,date:1} 
{id:2,pos:6,date:6} 

へのid 2、私はこれは非常に品質の問題ではありません知っていると答えた場合、私はと質問を編集することに最善を尽くします最高です。最終的な注文が見えないので、「ソート」

+0

?私たちは、どのアイテムがどのアイテムに移動するのか、どのアイテムがどこに移動するのかを決定するプロセスが何であるか分かりません。このように答えはほとんど不可能です。 – David

+0

文字通りインターフェイスを介して物事を他のポジションに移していますが、私はこのデータを使用してこの出力を達成する方法を理解しようとしています。 – SudoCoder

答えて

1

ただ、推測、辞書式ソート? Lexicographical orderを参照してください。

+0

私のデータセットで現在テストを行っていますが、すぐに更新されます。あなたのエントリーをありがとう! – SudoCoder

+0

悲しいことに、私はLexicographical orderを使って私の望む効果を再現することができませんでした。多くの答えを感謝します、ありがとう! – SudoCoder

0

オブジェクトの動きは、全体のサブ配列は、オブジェクトを挿入するためにシフトされる挿入ソート、同様です。日付は実行された操作の順序を示し、位置はオブジェクトがどこに移動されたかを示しますが、オブジェクトがどこから移動されたかのフィールドはありません。最初の注文から始まり、日付に従った動きに従うことで、シーケンスを再現するのに十分な情報があります。私は、シーケンスが与えられた情報と逆に従うことができるかどうかわからない。

元の順序は、IDフィールドを使用して、任意のソートアルゴリズムを使用して復元することができます。

0

私は「ソート」の名前を見つけることが、残念ながらできませんでした(?)しかし、私は、コード怒鳴るを使用するために目指していた効果を達成することができました。

PHPの実装(私が何かを逃した場合は、完全に私はそれと信用あなたを変更します知っています)。

$data = '[ 
    {"id":"1","pos":"1","date":"0"}, 
    {"id":"2","pos":"5","date":"0"}, 
    {"id":"3","pos":"4","date":"0"}, 
    {"id":"4","pos":"3","date":"0"}, 
    {"id":"5","pos":"4","date":"1"}, 
    {"id":"6","pos":"2","date":"0"} 
]'; //simulated data set 

$arr = json_decode($data,true); 
$final_arr = $arr; 

$tmp_array = array(); 
$actions = array(); 

for ($i=0; $i < sizeof($arr); $i++) { 
    $num = $i+1; 
    $tmp = array(); 
    for ($o=0; $o < sizeof($arr); $o++) { 
     if($arr[$o]['pos'] == 0)continue; 

     if($arr[$o]['pos'] == $num){ 
      array_push($tmp,$arr[$o]); 
     } 
    } 
    if($tmp){ 
     usort($tmp,function($a,$b){ 
      return $a['date'] > $b['date']; 
     }); 

     for ($o=0; $o < sizeof($tmp); $o++) { 
      array_push($tmp_array,$tmp[$o]); 
     } 
    } 
} 
for ($i=0; $i < sizeof($tmp_array); $i++) { 
    for ($o=0; $o < sizeof($arr); $o++) { 
     if($final_arr[$o]['id'] == $tmp_array[$i]['id']){ 
      array_splice($final_arr, $tmp_array[$i]['pos']-1, 0, array_splice($final_arr, $o, 1)); 
     } 
    } 
} 

$output = json_encode($final_arr,JSON_PRETTY_PRINT); 
printf($output); 

結果:私はあなたが実際にここでやっている、あなただけの別の場所に物事を動かしているのかわからないんだけど

[ 
    { 
     "id": "1", 
     "pos": "1", 
     "date": "0" 
    }, 
    { 
     "id": "6", 
     "pos": "2", 
     "date": "0" 
    }, 
    { 
     "id": "4", 
     "pos": "3", 
     "date": "0" 
    }, 
    { 
     "id": "5", 
     "pos": "4", 
     "date": "1" 
    }, 
    { 
     "id": "2", 
     "pos": "5", 
     "date": "0" 
    }, 
    { 
     "id": "3", 
     "pos": "4", 
     "date": "0" 
    } 
]