Exemple de tri Java Bubble

Exemple de tri Java Bubble

Bubble sort est l'algorithme de tri le plus simple, il compare les deux premiers éléments, si le premier est supérieur au second, les échange, continue à faire (compare et échange) pour la prochaine paire d'éléments adjacents. Il recommence ensuite avec les deux premiers éléments, compare, échange jusqu'à ce que plus aucun échange ne soit nécessaire.

1. Explication

#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;

Voici l'implémentation du tri à bulles Java.

    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. Exemple de tri Java Bubble

Un exemple complet pour démontrer l'utilisation de l'algorithme de tri à bulles pour trier un ensemble de données simple, prendre en charge l'ordre croissant ou l'ordre décroissant.

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);
    }

}

Sortie

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