[アルゴリズム]バブルソート(Bubble Sort)
2550 ワード
Intro
ソート・アルゴリズムは、次の2つに分類されます.簡単だが効率が低い方法:ソート、挿入ソート、バブルソート を選択する.複雑だがより効率的な方法:高速ソート、hipソート、連結ソート、基数ソート その中のBubbleソートについて議論します.
泡の位置合わせ
2つの隣接要素を検査することによって並べ替えられるアルゴリズム 2つの隣接要素を比較し、サイズが順序付けされていない場合、交換する. 選択ソートは、基本概念と類似しています. ろんり
1つの回転で、1番目の要素と2番目の要素、2番目の要素と3番目の要素、3番目と4番目の要素...この方法で最後の要素と最後の要素を比較し,条件に合わない場合は互いに交換する.
1回目の回転では最大の要素が最後に移動するため、2回目の回転では先頭の要素がソートから除外され、2回目の回転では終点から2番目の要素がソートから除外されます.これにより、ソートを1回行うたびに、ソートから除外されるデータが1つ増加します.
私より小さいなら、後ろの数字からチェックします."
最初のfor文は、除外する要素の数を表します.1回転終了後、配列の最後の位置に最大の要素を追加して位置させます.2番目のラウンドが終了すると、アレイの最後の2つの位置に2つの大きな要素が位置合わせされるので、2つを除いてください.この部分はコードの
上記の内容を理解すれば,なぜ総数からiを減算したのか理解できる.
2番目のfor文は、要素を比較するインデックスfor文を選択します.jは0からarr.length-i-1に増加した.ゼロから、現在の要素と次の要素を指します.
ドアで標準の数字と現在チェックしている数字を比較すると、標準の数字が現在チェックしている数字より大きいと、大きい数字は小数より前になるので、位置を変えます.
時間の複雑さ
(n-1) + (n-2) + (n-3) + ... + 2+1->n/(n-1)/2はO(n^2)である.
Bubbleソートは、2つの要素の最悪、最良および平均時間複雑度O(n^2)を比較するものである.
くうかんふくざつさ
与えられた配列で実行されるので、O(N)となる.
長所は簡単で、ソースコードが直感的です. は、ソートされたデータをソートするときに最も速い.👍 は、ソートする配列をソートする方法であり、他のメモリ領域は必要ありません. 安定したソート. 短所
24172❌は時間的複雑度が最も悪く,最も良く,平均はO(n^2)であるため効率が低下する.は、他のソートに比べてソート速度が遅い. 交換回数が多いですね. 逆順配列が最も遅い.🤯 Reference Ready-For-Tech-Interview
ソート・アルゴリズムは、次の2つに分類されます.
泡の位置合わせ
2つの隣接要素
1つの回転で、1番目の要素と2番目の要素、2番目の要素と3番目の要素、3番目と4番目の要素...この方法で最後の要素と最後の要素を比較し,条件に合わない場合は互いに交換する.
1回目の回転では最大の要素が最後に移動するため、2回目の回転では先頭の要素がソートから除外され、2回目の回転では終点から2番目の要素がソートから除外されます.これにより、ソートを1回行うたびに、ソートから除外されるデータが1つ増加します.
int[] arr = {7, 6, 2, 4, 3, 9, 1};
private static void sort(int[] arr) {
for (int i = 0; i < arr.length; i++) { // 1
for (int j = 0; j < arr.length - i - 1; j++) { // 2
if (arr[j] > arr[j + 1]) { // 3
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.print((i + 1) + "단계 : ");
print(arr);
}
}
private static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
// 단계별 결과.
1단계 : 6 2 4 3 7 1 9
2단계 : 2 4 3 6 1 7 9
3단계 : 2 3 4 1 6 7 9
4단계 : 2 3 1 4 6 7 9
5단계 : 2 1 3 4 6 7 9
6단계 : 1 2 3 4 6 7 9
7단계 : 1 2 3 4 6 7 9
「とにかく、前の数字が私より大きいなら、私と席を変えてください.私より小さいなら、後ろの数字からチェックします."
最初のfor文は、除外する要素の数を表します.1回転終了後、配列の最後の位置に最大の要素を追加して位置させます.2番目のラウンドが終了すると、アレイの最後の2つの位置に2つの大きな要素が位置合わせされるので、2つを除いてください.この部分はコードの
arr.length-i-1
です.上記の内容を理解すれば,なぜ総数からiを減算したのか理解できる.
2番目のfor文は、要素を比較するインデックスfor文を選択します.jは0からarr.length-i-1に増加した.ゼロから、現在の要素と次の要素を指します.
ドアで標準の数字と現在チェックしている数字を比較すると、標準の数字が現在チェックしている数字より大きいと、大きい数字は小数より前になるので、位置を変えます.
(n-1) + (n-2) + (n-3) + ... + 2+1->n/(n-1)/2はO(n^2)である.
Bubbleソートは、2つの要素の最悪、最良および平均時間複雑度O(n^2)を比較するものである.
くうかんふくざつさ
与えられた配列で実行されるので、O(N)となる.
長所
24172❌は時間的複雑度が最も悪く,最も良く,平均はO(n^2)であるため効率が低下する.
Reference
この問題について([アルゴリズム]バブルソート(Bubble Sort)), 我々は、より多くの情報をここで見つけました https://velog.io/@jaeyunn_15/알고리즘-거품-정렬-Bubble-Sortテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol