Algoritmo de clasificación de selección gráfica y optimización

ced485cbb11e458d81a746890b32cf3f.gif

Autor: Rukawa Maple Knock Code

Página de inicio del blog: Blog de Rukawa Kaede

Columna: Aprende java conmigo

Cita: Mantente hambriento, mantente tonto

Si quieres hacer cosas buenas, primero debes afilar tus herramientas. Permíteme presentarte una herramienta súper poderosa para ganar ofertas de grandes fabricantes: Niuke.com

Haga clic para registrarse de forma gratuita y aclarar las preguntas conmigo    

Directorio de artículos

1. Pensamiento algorítmico

2. Diagrama del algoritmo

3. Implementación del código

4. optimización del algoritmo de clasificación de selección

5. Funciones de clasificación de selección


1. Pensamiento algorítmico

1. Encuentra el elemento más grande (más pequeño) en la matriz

2. Intercámbielo con el primer elemento de la matriz (si el primer elemento es el más grande o el más pequeño, entonces intercámbielo con usted mismo)

3. Encuentre el elemento más grande (más pequeño) entre los elementos restantes, intercámbielo con el segundo elemento de la matriz y repita hasta que se ordene toda la matriz.

El algoritmo consiste en seleccionar continuamente el elemento más grande (el más pequeño) entre los elementos restantes y luego clasificarlos, por lo que el algoritmo se denomina clasificación por selección.

2. Diagrama del algoritmo

Seleccione ordenar por el diagrama de matriz de matriz, el resultado de la clasificación es en orden ascendente

int[] array = {25,33,10,15,70,45};

 Suponiendo que el primer número al comienzo de cada ciclo es siempre el más pequeño, minIndex contiene el subíndice i del número más pequeño, rango i: de 0 a array.length-1

Comience a recorrer la matriz, encuentre el número más pequeño, guarde el índice e intercambie el número más pequeño con el número al que apunta el minIndex actual

 Suponiendo que el número mínimo es 33, comience a recorrer hacia atrás, encuentre el número mínimo 15, intercambie

 Continúe el ciclo, 25 es actualmente el más pequeño, intercambie con usted mismo

  Continúe el ciclo, 33 es actualmente el más pequeño, intercambie con usted mismo

 Continúe el ciclo, el número mínimo es 45 y se intercambia 70

  Continúe el ciclo, 70 es actualmente el mínimo, intercambie con usted mismo

Hasta ahora la clasificación está completa

3. Implementación del código

import java.util.Arrays;

public class ChoiceSort{
    public int[] sortArray(int[] nums){
        if(nums.length == 0){
            return nums;
        }
        for (int i = 0; i < nums.length; i++) {
            int minIndex = i;//最小数的下标,每个循环开始总是假设第一个数是最小数
            for (int j = i; j < nums.length; j++) {
                if (nums[j] < nums[minIndex]){//找到最小数
                    minIndex = j;//保存最小数索引
                }
            }
            System.out.println("本轮最小数:"+nums[minIndex]);
            //交换最小数和当前i所指向的元素
            int tmp = nums[minIndex];
            nums[minIndex] = nums[i];
            nums[i] = tmp;
            PrintArray.print(nums);
            System.out.println("————————————————");
        }
        return nums;
    }
    public static void main(String[] args) {
        int[] array = {25,33,10,15,70,45};
        System.out.println("初始数组:");
        PrintArray.print(array);
        ChoiceSort choiceSort = new ChoiceSort();
        choiceSort.sortArray(array);
        System.out.println("排序完成");
        PrintArray.print(array);
    }
}
class PrintArray{
    public static void print(int[] array){
        System.out.println(Arrays.toString(array));
    }
}

resultado:

4. optimización del algoritmo de clasificación de selección

Idea: generalmente, en un recorrido, encuentre los valores máximo y mínimo al mismo tiempo y colóquelos en ambos extremos de la matriz, de modo que el número de recorridos se pueda reducir a la mitad.

Recorra la matriz para encontrar los valores máximo y mínimo, coloque el valor mínimo a la izquierda de la matriz, coloque el valor máximo a la derecha de la matriz y luego continúe repitiendo la operación hasta que se complete la clasificación

Código: 

import java.util.Arrays;

public class ChoiceSort{
    public int[] sortArray(int[] nums) {
        if (nums.length == 0) {
            return nums;
        }
        /*初始化左端、右端元素索引*/
        int left = 0;
        int right = nums.length - 1;
        while (left < right) {
            /*初始化最小值、最大值元素的索引*/
            int min = left;
            int max = right;
            for (int i = left; i <= right; i++) {
                /*标记每趟比较中最大值和最小值的元素对应的索引min、max*/
                if (nums[i] < nums[min])
                    min = i;
                if (nums[i] > nums[max])
                    max = i;
            }
            /*最大值放在最右端*/
            int temp = nums[max];
            nums[max] = nums[right];
            nums[right] = temp;
            /*此处是先排最大值的位置,所以得考虑最小值(arr[min])在最大位置(right)的情况*/
            if (min == right)
                min = max;
            /*最小值放在最左端*/
            temp = nums[min];
            nums[min] = nums[left];
            nums[left] = temp;
            /*每趟遍历,元素总个数减少2,左右端各减少1,left和right索引分别向内移动1*/
            left++;
            right--;
        }

        return nums;
    }
    public static void main(String[] args) {
        int[] array = {25,33,10,15,70,45};
        System.out.println("初始数组:");
        PrintArray.print(array);
        ChoiceSort choiceSort = new ChoiceSort();
        choiceSort.sortArray(array);
        System.out.println("排序完成");
        PrintArray.print(array);
    }
}
class PrintArray{
    public static void print(int[] array){
        System.out.println(Arrays.toString(array));
    }
}

resultado: 

5. Funciones de clasificación de selección

        En la secuencia a clasificar, cuando el número de elementos es pequeño, es adecuado utilizar la clasificación por selección, y la complejidad temporal es O(n2)
  . , si hay elementos en la secuencia a clasificar que son iguales al original elementos en ambos extremos, la estabilidad puede ser destruida

"El intercambio de este problema está aquí, recuerda darle al blogger un enlace de tres, ¡tu apoyo es la mayor fuerza impulsora para mi creación!

ced485cbb11e458d81a746890b32cf3f.gif

Supongo que te gusta

Origin blog.csdn.net/chenchenchencl/article/details/126536612
Recomendado
Clasificación