Java Bubble-Sortierungsbeispiel

Beispiel für eine Java-Blasensortierung

Bubble sort ist der einfachste Sortieralgorithmus. Er vergleicht die ersten beiden Elemente. Wenn das erste größer als das zweite ist, tauscht er sie aus und fährt fort (vergleicht und tauscht) für das nächste Paar benachbarter Elemente. Es beginnt dann wieder mit den ersten beiden Elementen, vergleicht, tauscht, bis keine Tausch mehr erforderlich sind.

1. Erläuterung

#unsorted data -> [99, 88, 55, 77, 1, 66]

#1 iteration.
#1.1 -> [, , 55, 77, 1, 66] -> [, , 55, 77, 1, 66]
#1.2 -> [88, , , 77, 1, 66] -> [88, , , 77, 1, 66]
#1.3 -> [88, 55, , , 1, 66] -> [88, 55, , , 1, 66]
#1.4 -> [88, 55, 77, , , 66] -> [88, 55, 77, , , 66]
#1.5 -> [88, 55, 77, 1, , ] -> [88, 55, 77, 1, , ]

#2 iteration.
#2.1 -> [, , 77, 1, 66, 99] -> [, , 77, 1, 66, 99]
#2.2 -> [55, , , 1, 66, 99] -> [55, , , 1, 66, 99]
#2.3 -> [55, 77, , , 66, 99] -> [55, 77, , , 66, 99]
#2.4 -> [55, 77, 1, , , 99] -> [55, 77, 1, , , 99]

#3 iteration.
#3.1 -> [, , 1, 66, 88, 99] -> [55, 77, 1, 66, 88, 99] {no swap}
#3.2 -> [55, , , 66, 88, 99] -> [55, , , 66, 88, 99]
#3.3 -> [55, 1, , , 88, 99] -> [55, 1, , , 88, 99]

#4 iteration.
#4.1 -> [, , 66, 77, 88, 99] -> [, , 66, 77, 88, 99]
#4.2 -> [, , 66, 77, 88, 99] -> [1, 55, 66, 77, 88, 99] {no swap}

#5 iteration.
#5.1 -> [, , 66, 77, 88, 99] -> is_sorted = true, break;

Hier ist die Implementierung der Java-Blasensortierung.

    public static void sort(int[] input) {

        int inputLength = input.length;
        int temp;
        boolean is_sorted;

        for (int i = 0; i < inputLength; i++) {

            is_sorted = true;

            for (int j = 1; j < (inputLength - i); j++) {

                if (input[j - 1] > input[j]) {
                    temp = input[j - 1];
                    input[j - 1] = input[j];
                    input[j] = temp;
                    is_sorted = false;
                }

            }

            // is sorted? then break it, avoid useless loop.
            if (is_sorted) break;

            System.out.println("\n");

        }

    }

2. Beispiel für eine Java-Blasensortierung

Ein vollständiges Beispiel zur Demonstration der Verwendung des Blasensortierungsalgorithmus zum Sortieren eines einfachen Datensatzes, zur Unterstützung der aufsteigenden oder absteigenden Reihenfolge.

BubbleSortExample.java

package com.example;

import java.util.Arrays;
import java.util.stream.Collectors;

public class BubbleSortExample{

    public static void main(String[] args) {

        int[] array = {99, 88, 55, 77, 1, 66};

        System.out.print("unsorted data: ");
        printArray(array);

        System.out.print("ascending order: "); //1,55,66,77,88,99
        bubble_sort(array);

        printArray(array);

        System.out.print("descending order: "); //99,88,77,66,55,1
        bubble_sort(array, false);

        printArray(array);

    }

    private static void bubble_sort(int[] input) {
        bubble_sort(input, true);
    }

    private static void bubble_sort(int[] input, boolean ascending) {

        int inputLength = input.length;
        int temp;
        boolean is_sorted;

        for (int i = 0; i < inputLength; i++) {

            is_sorted = true;

            for (int j = 1; j < (inputLength - i); j++) {

                if (ascending) {
                    if (input[j - 1] > input[j]) {
                        temp = input[j - 1];
                        input[j - 1] = input[j];
                        input[j] = temp;
                        is_sorted = false;
                    }
                } else {
                    if (input[j - 1] < input[j]) {
                        temp = input[j - 1];
                        input[j - 1] = input[j];
                        input[j] = temp;
                        is_sorted = false;
                    }

                }

            }

            // is sorted? then break it, avoid useless loop.
            if (is_sorted) break;

        }

    }

    private static void printArray(int[] data) {
        String result = Arrays.stream(data)
                .mapToObj(String::valueOf)
                .collect(Collectors.joining(","));
        System.out.println(result);
    }

}

Ausgabe

unsorted data: 99,88,55,77,1,66
ascending order: 1,55,66,77,88,99
descending order: 99,88,77,66,55,1