int[] array = { 4, 7, 1, 5, 2, 6 }; for (int i = 0; i < array.length; i++) { for (int j = i; j > 0 && array[j - 1] > array[j]; j--) { array[j] = array[j - 1] + array[j]; array[j - 1] = array[j] - array[j - 1]; array[j] = array[j] - array[j - 1]; } }
学习是最好的投资!
挿入ソート、上記の交換は中間変数を使用しませんが、a=a+b がオーバーフローを引き起こす可能性があるという問題もあります。中間変数を使用しない別の方法は、XOR を使用することです: a=a。 ^b,b=a^b,a=a^b このメソッドは、浮動小数点数には適していません。つまり、追加のスペースなしでデータを交換するためにのみ使用されます。 。 。焦点は依然としてアルゴリズム自体にあります。 。
ネストされたループは挿入ソートで記述されますが、内側のループ本体は挿入ソートとは異なります。
挿入ソート、ループの第 2 レベルは、array[j-1]>array[j] の場合、array[j] と array[j-1] の値を交換します
挿入ソート
このコードは交換を意味し、中間変数は必要ありません
挿入ソート。第 2 レベルのループ内は値の交換を意味します
挿入ソート。第 2 レベルのループのコードは少し乱雑に見えるかもしれませんが、単純化すると次と同等です。
a = a + b;b = a – b;
a = a – b;* は、a と b の値の交換を意味します。理解できない場合は、具体的な数字を置き換えて確認できます。
挿入ソート、上記の交換は中間変数を使用しませんが、a=a+b がオーバーフローを引き起こす可能性があるという問題もあります。中間変数を使用しない別の方法は、XOR を使用することです: a=a。 ^b,b=a^b,a=a^b このメソッドは、浮動小数点数には適していません。つまり、追加のスペースなしでデータを交換するためにのみ使用されます。 。 。焦点は依然としてアルゴリズム自体にあります。 。
ネストされたループは挿入ソートで記述されますが、内側のループ本体は挿入ソートとは異なります。
挿入ソート、ループの第 2 レベルは、array[j-1]>array[j] の場合、array[j] と array[j-1] の値を交換します
挿入ソート
リーリーこのコードは交換を意味し、中間変数は必要ありません
挿入ソート。第 2 レベルのループ内は値の交換を意味します
挿入ソート。第 2 レベルのループのコードは少し乱雑に見えるかもしれませんが、単純化すると次と同等です。
a = a – b;
* は、a と b の値の交換を意味します。理解できない場合は、具体的な数字を置き換えて確認できます。