El algoritmo de clasificación rápida, escrito así, supera al 95% de los programadores

En 1960 , el informático británico Hall propuso un algoritmo de clasificación eficiente: la clasificación rápida. La idea central es seleccionar un elemento de referencia y dividir la matriz para ordenarla en dos partes. Algunos de ellos son más pequeños que el elemento base y otros son más grandes que el elemento base. Luego, las dos partes se clasifican rápidamente respectivamente y, finalmente, todo el proceso de clasificación se completa mediante recursividad. Este algoritmo es muy eficiente y ampliamente utilizado.

Los pasos principales de este algoritmo incluyen:

1. Antes de seleccionar un elemento pivote, es necesario tomar una decisión.

2. Divida la matriz en dos partes: una parte contiene todos los elementos que son menores que el pivote y la otra parte contiene todos los elementos que son mayores o 3. iguales que el pivote. Este paso se llama partición.

Ordene los dos subarreglos de forma recursiva.

El siguiente es un ejemplo básico del uso de Java para implementar la clasificación rápida utilizando FuncGPT (función inteligente) generada por la herramienta de desarrollo de software totalmente automática y de pila completa, el robot de software soflu :

// 类名:QuickSort

// 函数名:quickSort

// 函数功能:使用快速排序算法对数组进行排序

// POM依赖包:无



public class QuickSort {



    /**

     * 使用快速排序算法对数组进行排序

     * @param arr 待排序的数组

     */

    public static void quickSort(int[] arr) {

        if (arr == null || arr.length <= 1) {

            return;

        }

        sort(arr, 0, arr.length - 1);

    }



    /**

     * 快速排序的递归实现

     * @param arr 待排序的数组

     * @param low 左边界

     * @param high 右边界

     */

    private static void sort(int[] arr, int low, int high) {

        if (low < high) {

            int pivot = partition(arr, low, high); // 获取基准值的索引

            sort(arr, low, pivot - 1); // 对基准值左侧的子数组进行排序

            sort(arr, pivot + 1, high); // 对基准值右侧的子数组进行排序

        }

    }



    /**

     * 快速排序的分区实现

     * @param arr 待排序的数组

     * @param low 左边界

     * @param high 右边界

     * @return 选择的基准值的索引

     */

    private static int partition(int[] arr, int low, int high) {

        int pivot = arr[low]; // 选择第一个元素作为基准值

        int i = low + 1;

        int j = high;



        while (i <= j) {

            while (i <= j && arr[i] <= pivot) {

                i++;

            }



            while (i <= j && arr[j] > pivot) {

                j--;

            }



            if (i < j) {

                swap(arr, i, j);

            }

        }



        swap(arr, low, j); // 将基准值放到正确的位置上



        return j;

    }



    /**

     * 交换数组中两个位置的元素

     * @param arr 数组

     * @param i 位置1

     * @param j 位置2

     */

    private static void swap(int[] arr, int i, int j) {

        int temp = arr[i];

        arr[i] = arr[j];

        arr[j] = temp;

    }



    public static void main(String[] args) {

        int[] arr = new int[]{9, 5, 1, 8, 3, 7, 4, 2, 6};

        quickSort(arr);

        for (int num : arr) {

            System.out.print(num + " ");

        }

    }

}

```



// 函数示例

// 使用快速排序算法对数组进行排序示例

// 入参:arr,待排序的数组

// 出参:无,直接对输入的数组进行排序

// 调用示例:

// int[] arr = new int[]{9, 5, 1, 8, 3, 7, 4, 2, 6};

// QuickSort.quickSort(arr);

// 输出结果:例如,对数组[9, 5, 1, 8, 3, 7, 4, 2, 6]进行排序

// 排序后的数组为[1, 2, 3, 4, 5, 6, 7, 8, 9]

// 则输出结果为:1 2 3 4 5 6 7 8 9

```

// 温馨提示:以上代码由 FuncGPT 生成,编译打包请使用 QuickSort.java 文件。

Las funciones principales de este código incluyen:

  1. QuickSort (int [] arr):  esta es la función de entrada de clasificación rápida, acepta una matriz de números enteros como parámetro y la ordena. Si la matriz de entrada está vacía o contiene solo un elemento, esta función regresará directamente.
  2. sort(int[ ] arr, int low, int high):  esta es una función recursiva utilizada para ordenar subrangos de una matriz. Si el límite inferior izquierdo  es más pequeño que el límite superior derecho, selecciona un elemento pivote y luego ordena recursivamente los subarreglos a la izquierda y a la derecha del elemento pivote.
  3. partición (int[] arr, int low, int high):  esta función se utiliza para implementar la operación de partición en ordenación rápida. Selecciona un elemento base en la matriz y luego mueve otros elementos en la matriz a la izquierda o derecha del elemento base. En este proceso, los elementos más pequeños que el elemento base se moverán a la izquierda del elemento base y los elementos más grandes que el elemento base se moverán a la derecha del elemento base. Esta función devuelve la posición del elemento de referencia en la matriz ordenada.
  4. swap(int[ ] arr, int i, int j):  esta función se utiliza para intercambiar elementos en dos posiciones de la matriz. En la función principal, se crea una matriz a ordenar, luego se llama a la función QuickSort para ordenarla y finalmente se imprime la matriz ordenada. Si desea saber cuál es el resultado ordenado, puede ejecutar este código y mirar la salida de la consola. En este ejemplo, la matriz de entrada es [9, 5, 1, 8, 3, 7, 4, 2, 6]. Después de una clasificación rápida, el resultado de salida es [1, 2, 3, 4, 5, 6, 7 , 8, 9].

Lo anterior es el proceso básico de un algoritmo de clasificación rápida escrito en Java mediante FuncGPT (función Hui). Pusimos el código anterior en Wen Xinyiyan y la evaluación que obtuvimos fue: Este código Java implementa un algoritmo de clasificación rápida con una estructura clara, fácil de entender y usar (ver captura de pantalla para más detalles).

https://oscimg.oschina.net/oscnet/up-f9ad9cc02d252071b9ba7f764af41457041.png

 

Como parte importante de la herramienta de desarrollo de software totalmente automática y de pila completa, el robot de software SoFlu, FuncGPT admite la creación de todo tipo de funciones. Utilice lenguaje natural para describir los requisitos de las funciones Java y generar código de funciones Java de alta calidad y muy legible en tiempo real. El código generado se puede copiar directamente a IDEA o importar a la biblioteca de funciones de la herramienta de desarrollo totalmente automática de Java con un solo clic. Siga la cuenta pública [robot de software SoFlu] para solicitar una prueba gratuita.

Lanzamiento oficial de Spring Boot 3.2.0. La falla de servicio más grave en la historia de Didi. ¿El culpable es el software subyacente o "la reducción de costos y el aumento de las risas"? Los programadores manipularon los saldos de ETC y malversaron más de 2,6 millones de yuanes al año. Los empleados de Google criticaron al gran jefe después de dejar sus trabajos. Estuvieron profundamente involucrados en el proyecto Flutter y formularon estándares relacionados con HTML. Microsoft Copilot Web AI se lanzará oficialmente el 1 de diciembre, compatible con PHP 8.3 chino GA Firefox en 2023. El marco web Rust Rocket se ha vuelto más rápido y lanzó v0.5: admite asíncrono, SSE, WebSockets, etc. Se lanza oficialmente el procesador de escritorio Loongson 3A6000, ¡la luz de la producción nacional! Broadcom anuncia exitosa adquisición de VMware
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4868096/blog/10295403
Recomendado
Clasificación