2016-12-31 3 views
-3

基本的には、私はのを、基本的にaData[i]に置き換えました。根本的に何かが間違っていますか? 2番目の実装は、同じTESTデータで失敗します。Insertion Sortの2つの(ほぼ同じ)実装の比較。そのうちの1つが失敗する

渡す実装:

static long[] sort(long[] aData) { 
    for (int i = 1; i < aData.length; i++) { 
     long n = aData[i]; 

     int j = i - 1; 
     while (j >= 0 && aData[j] > n) { 
      aData[j + 1] = aData[j]; 
      j--; 
     } 
     aData[j + 1] = n; 
    } 
    return aData; 
} 

失敗実装:whileループの最初の反復で

static long[] sort(long[] aData) { 
    for (int i = 1; i < aData.length; i++) { 
     int j = i - 1; 
     while (j >= 0 && aData[j] > aData[i]) { 
      aData[j + 1] = aData[j]; 
      j--; 
     } 
     aData[j + 1] = aData[i]; 
    } 
    return aData; 
} 
+0

質問は_reason_が記載されていない状態でダウン投票されています。良いゲートキーパー。 –

+0

この質問はこのサイトの仕組みを読んで理解することなく投稿されました。 [help]にアクセスして[ask]を読んでください。実際には、 "私のためにこれをデバッグしてください"というコードを掲示して言っているのは、話題外であると考えられています。 –

+1

正直言って、私が質問する時間の95%近くは、話題になっていません。私は、** FEAR **の** OFF-TOPIC **としてマークされているので、SOに関する質問を真剣に控えることはできません。私は通常非常に慎重です。この質問はCRに投票された後、私はここに来て、ここで投票に落ちました。正直なところ、私は質問を投稿する場所がわかりません.SO上の_GOOD_質問の定義は非常に非常に主観的です。私はあなたが私が言っていることを理解することを願っています –

答えて

2

j + 1 == i。したがって、aData[j + 1] = aData[j]と書くと、ループ内でaData[i]の値が変更されます。

初期バージョンでは、nは動作中一定です。また、nの代わりにaData[i]を使用すると、パフォーマンスが向上する可能性はほとんどありません(もしあれば、おそらく遅くなります)。

+0

入手しました。私は馬鹿だと感じる。 –

関連する問題