バブル整列(Bubble Sort)
1.泡の位置合わせ
Bubbleソートは、一端から他端に移動し、2つずつ比較します.比較を行う場合、必要に応じて位置を変えることができます.終点に到達すると、終点にある値はソートを終了します.並べ替えが完了したばかりなので、移動する位置を1つ減らす必要があるため、開始位置に移動し直します.
このような手順を繰り返して、位置合わせの値を徐々に増やし、最終的にはすべての要素が位置合わせされます.
元素がN個であれば、最初に(N−1)回比較を行う.そして(N-2)番です...最後に一度だけ比較します.
合計比較オペランドは1+2+...+N-1=(N-1)*N/2.
合計交換演算回数は平均(N-1)*N/4である.
2つの数値を加算した結果はn^2に比例するので,時間的複雑度はO(n^2)である.
2.Javaコード
コードはオブジェクトを体現している.一般的な数字の体現と原理には何の違いもない.ただし、ソート可能なオブジェクトを作成するために、ソートされたPOJOは
Comparable
およびimplements
になる.compareTo(Object obj)
は正数(+)を返すと前後の順序が変わり、負数(-)を返すと順序は変わらない.Itemクラス
public final class Item implements Comparable<Item> {
private final int price;
private Item(int price) {
this.price = price;
}
// Item 객체 생성용 정적 팩토리 메소드
public static Item valueOf(int price) {
return new Item(price);
}
public int getPrice() {
return price;
}
// 비교 대상인 item의 key(price)가 더 작으면 자리를 바꾸도록 양수(+) 반환 -> 오름차순 정렬
@Override
public int compareTo(Item item) {
return price - item.getPrice();
}
}
バブルソートクラスimport java.util.Comparator;
public class BubbleSort {
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void sort(Object[] arr) {
for (int end = arr.length - 1; end >= 1; end--) {
//int swapCount = 0;
for (int i = 0; i < end; i++) {
Comparable first = (Comparable) arr[i];
Comparable second = (Comparable) arr[i + 1];
if (first.compareTo(second) > 0) {
swap(arr, i, i + 1);
//swapCount++;
}
}
/*if (swapCount == 0) {
break;
}*/
}
}
public static <T> void sort(T[] arr, Comparator<T> comparator) {
for (int end = arr.length - 1; end >= 1; end--) {
//int swapCount = 0;
for (int i = 0; i < end; i++) {
if (comparator.compare(arr[i], arr[i + 1]) > 0) {
swap(arr, i, i + 1);
//swapCount++;
}
}
/*if (swapCount == 0) {
break;
}*/
}
}
private static void swap(Object[] arr, int i, int j) {
Object temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
コメントコードこれは、ソートが早期に完了したかどうかを確認するコードです.残りの区間を巡る過程でswapが発生しなかった場合、ソートは完了します.したがって、並べ替えを行う必要はありません.
テスト
public class App {
public static void main(String[] args) {
Item item1 = Item.valueOf(50);
Item item2 = Item.valueOf(20);
Item item3 = Item.valueOf(70);
Item item4 = Item.valueOf(100);
Item item5 = Item.valueOf(10);
Item[] items = new Item[] { item1, item2, item3, item4, item5 };
BubbleSort.sort(items);
System.out.println("오름차순");
for (Item item : items) {
System.out.println(item.getPrice());
}
System.out.println();
//i2 > i1이면 양수(+) 리턴하므로 자리가 바뀌어 i2가 앞으로 오게 된다.
BubbleSort.sort(items, (Item i1, Item i2) -> i2.compareTo(i1));
System.out.println("내림차순");
for (Item item : items) {
System.out.println(item.getPrice());
}
}
}
出力結果오름차순
10
20
50
70
100
내림차순
100
70
50
20
10
Reference
この問題について(バブル整列(Bubble Sort)), 我々は、より多くの情報をここで見つけました https://velog.io/@yaincoding/버블-정렬Bubble-Sortテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol