Noções básicas de Java: algoritmos comuns (algoritmos de classificação)

1. Classificação de bolhas

// bubbling sort
        int[] arr = {14,23,7,35,12,3,46};
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]){
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

2. Classificação de seleção

// selection sort
        int[] arr = {14,23,7,35,12,3,46};
        for (int i = 0; i < arr.length - 1; i++) {
            for (int j = 1 + i; j < arr.length; j++) {
                if (arr[i] > arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

3. Classificação por inserção

int[] arr = {3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
        int NIndex = 0;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] <= arr[i + 1]){
                NIndex = i + 1;
            }else {
                break;
            }
        }
        System.out.println(NIndex);

        for (int i = NIndex + 1; i < arr.length; i++) {
            int a = 0;
            for (int j = i - 1; j >= 0; j--) {
                if (arr[i - a] >= arr[j]){
                    break;
                }else {
                    int temp = arr[j];
                    arr[j] = arr[i - a];
                    arr[i - a] = temp;
                    a++;
                }
            }
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }

4. Classificação rápida

4.1 Recursão

4.2 Exercícios de recursão

// 递归
    public static void main(String[] args) {
        int num = 5;
        int factorial = getFactorial(num);
        System.out.println(factorial);
    }

    private static int getFactorial(int num) {
        if (num == 1){
            return 1;
        }else {
            return num * getFactorial(num - 1);
        }
    }

Recursão é chamar métodos continuamente para a pilha camada por camada, depois atribuir o valor ao método anterior por meio da saída e abrir a pilha camada por camada para obter o resultado final.

4.3 Classificação Rápida

Perceber: 

1. Você deve primeiro mover o ponteiro para a direita, pois só assim você pode garantir que o número trocado com o número de referência seja menor que o número de referência, para garantir que os números à esquerda sejam menores que os número de referência, e os números à direita são maiores que o número de referência. 

2. O ponteiro da esquerda precisa partir da posição inicial, ou seja, a posição do número de referência, caso contrário pode ocorrer uma situação em que j = i+1 não é trocado.

public static void main(String[] args) {
        int[] arr = {6,2,1,7,9,3,4,5,10,8};
        quickSort(arr, 0, arr.length - 1);

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    private static void quickSort(int[] arr, int i, int j) {
        int start = i;
        int end = j;

        if (start > end){
            return;
        }

        int baseNumber = arr[i];

        while (start != end){
            while (true){
                if (end <= start || arr[end] < baseNumber){
                    break;
                }
                end--;
            }

            while (true){
                if (end <= start || arr[start] > baseNumber){
                    break;
                }
                start++;
            }

            int temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
        int temp = arr[i];
        arr[i] = arr[end];
        arr[end] = temp;

        quickSort(arr, i, start - 1);

        quickSort(arr, start + 1, j);
    }

 

Acho que você gosta

Origin blog.csdn.net/Orange_sparkle/article/details/129302227
Recomendado
Clasificación