2017-03-10 15 views
3

長いlong unsigned intで配列が配列されているとします。隣接する要素間の距離は小さい。たとえば、次のようになります。[0,1,0,1,0,1] 別の配列が同じサイズであり、隣接する要素間の距離が重要になりました。 次に、[1、1000000000、1、1000000000、1、1000000000]という配列があります。並べ替えアルゴリズムと数値間の距離

最後のステップは、挿入ソートまたはマージソートまたはクイックソートで2つの配列をソートすることです。 要素間の距離が離れているため、2番目の配列の処理時間が長くなる可能性はありますか?

ありがとうございます!彼らはこれらの要素ではなく、それらの絶対サイズ相対順序に純粋に基づいて要素をソートするため、挿入ソート、クイックソート、およびマージソート等

+0

"距離"が大きい場合、どの値が大きいかを判断するのに時間がかかりますか?そうでない場合は、どのような違いがありますか? – Dmitri

答えて

5

ソートアルゴリズムは、比較ソートと呼ばれます。 quicksort、mergesort、または挿入ソートの観点から、配列[0,1,0,1,0]と[0,100000,0,100000,0]は完全に同一です。なぜなら、100000 「1よりもはるかに大きい」。これらの配列をソートするために実行される操作の総数は、完全に同じになります。実際に、これらのアルゴリズムで各配列をソートし、要素が動き回るのを見ると、まったく同じ動きが行われることがわかります。

1つの機械語に収まる整数をソートする場合、移動のコストはその機械語に格納されている数値とは関係ありません。これらの要素を比較するコストも同じである可能性があります。したがって、これらのアルゴリズムでこれらの配列をソートするのに必要な時間には全く違いはないと私は予測しています。

異なる場合は、使用しているプロセッサが異なるサイズの数を異なる時間数で比較または移動できることを意味します。私の知る限りでは、これを行う実際のプロセッサーアーキテクチャーはありません。

さて、一方、比較ソートではなく、ソートまたは基数ソートを数えるようなアルゴリズムを、ソートは、これらをソートするために時間がかかる可能性があり、あなたが扱っている数字の大きさに依存を行います一度に1桁の数字で作業するか、質問内の数字のサイズに応じたサイズの配列に分配することによって、配列を作成できます。そのような場合、になります。使用したアルゴリズムがうまく実装されていれば、ランタイムの違いを確認できます。

+0

"これを行う実際のプロセッサアーキテクチャは存在しない"(異なる時間に数値を比較する) - >確かに8ビットエンベデッドプロセッサは、64ビット整数 "1"と "1000000000"の順序を '0'一定時間を使用する64ビットプロセッサとは異なり、 '' 1 ''となります。まだ非常に良い答えです。 – chux

+0

本当ですが、OPはlong long intと言っていました。答えは、「あなたが単一の機械語に収まる整数をソートすることについて話しているのなら、」という主張を正しく修飾しました。その答えは、借り伝播が少なくなったときに一単語の比較を高速化するアーキテクチャについて考えていましたが、そういうものは存在しないか痛みを伴いまれであると推測する危険があります。 :) –

関連する問題