バブルソート
基本的な考え方: 並べ替える一連の数値において、現在並べ替えられていない範囲内のすべての数値について、隣接する 2 つの数値を上から下に順番に比較して調整します。これにより、大きい数値が沈み、小さい数値が沈みます。数値が上がります。
つまり、2 つの隣接する数値が比較され、それらの順序が順序要件と逆であることが判明した場合は常に、それらは交換されます。
1回目の比較と並べ替えの結果: 最大のデータが最大のインデックスに配置されます
2回目の比較と並べ替えの結果: 1回目で最大のデータが最大のインデックスに配置されたため、データは今回比較されるのは、配列の要素数より-1少なく、2番目に大きいデータも2番目に大きいインデックスにランク付けされます
3回目の比較と並べ替えの結果:2回目とほぼ同じですが、今回は比較するデータが配列の要素数より 2 少ないです
4 回目: 3 少ない...
要約すると、大規模な並べ替えでは、配列内のデータを小さいものから順に並べる必要があります。比較の合計数は配列の長さの -1 倍になります。比較の数が増えると、毎回比較されるデータが減少します。
public class Demo4 { public static void main(String[] args) { int number[]={49,38,65,97,76,13,27,14,10}; for(int i=0;i<number.length-1;i++){ for(int j=0;j<number.length-1-i;j++){ if(number[j]>number[j+1]){ int tmp=number[j]; number[j]=number[j+1]; number[j+1]=tmp; } } for (int j = 0; j < number.length; j++) { System.out.print(number[j]+"\t"); } System.out.println("排序"+(i+1)+"次后的结果"); } } }
選択ソート
基本的な方法:
インデックス0から開始し、次の要素を順番に比較し、小さいものを最初に配置します。1回目は最小値が最小インデックスに表示され、2回目は最小値を見つけます。 2 番目に小さい値。
具体的にどうやって実装するの?
まず、最初のラウンドでは、インデックス 0 のデータが、それより小さいデータが見つかるまで、後続の各インデックスのデータと順番に比較されます。この時点で、この小さなデータがインデックスの元のデータと置き換えられます。 0、その後、この置き換えられたデータは、元のインデックス位置の後ろのインデックス上のデータと比較され続けます。つまり、最初のラウンドの後、インデックス 0 のデータはこの配列上の最小のデータでなければなりません
2 番目のラウンドが続きます。後続のデータと比較するのは 1 番目のインデックス上のデータです。このとき、比較に参加するデータは 1 つ少ないため、j の値は次のようになります。サイクルの 1 ラウンドで +1 になります。これは、j の添え字 +1 が開始されるときです。
public class Demo5 { public static void main(String[] args) { int number[]={49,38,65,97,76,13,27,14,10}; for(int i=0;i<number.length;i++){ for(int j=i+1;j<number.length;j++){ if(number[i]>number[j]){ int tmp=number[i]; number[i]=number[j]; number[j]=tmp; } } for (int j = 0; j < number.length; j++) { System.out.print(number[j]+"\t"); } System.out.println("第"+(i+1)+"次排序后的结果"); } } }
挿入ソートの最悪の実行時間は O(n2) であるため、最適なソート アルゴリズムではありません。
入力配列がすでにソートされている場合、挿入ソートは最適に行われ、その実行時間は入力サイズの一次関数になります。
入力配列が逆順にソートされている場合、最悪のケースが発生します。平均的なケースは最悪のケースと同じであり、その時間コストは Θ(n2) です。
りー
以上がJava のいくつかの並べ替えアルゴリズムのアイデアとコード例を共有するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。