Hablando sobre el ejemplo del algoritmo de clasificación rápida de Flutter Dart

 

En el proceso de investigación y desarrollo diario, siempre estamos considerando si los programas que desarrollamos son eficientes, una buena ejecución del programa es inseparable de una comprensión profunda y el dominio de los algoritmos. En los próximos días, llevaré a todos a revisar varios algoritmos comunes.

¡Aprendamos juntos sobre  el algoritmo de clasificación rápida  !

algoritmo de clasificación rápida

Introducción de Wikipedia: la ordenación rápida utiliza la estrategia Divide y vencerás para dividir una secuencia (lista) en dos subsecuencias más pequeñas y más grandes, luego ordena recursivamente las dos subsecuencias y finalmente fusiona para obtener una lista de menor a mayor la secuencia de.

Los amigos inteligentes preguntarán: ¿Cuál es la estrategia de divide y vencerás?

Divide y conquistaras

La explicación literal es "divide y vencerás", que consiste en dividir un problema complejo en dos o más subproblemas idénticos o similares, y luego dividir los subproblemas en subproblemas más pequeños... hasta que el último subproblema pueda ser resuelto simple y directamente, la solución del problema original es la combinación de las soluciones de los subproblemas.

A partir de esto, podemos conducir a los pasos de implementación del algoritmo de clasificación rápida del que estamos hablando hoy :

  • Obtenga un valor al azar de los datos y divídalo en dos conjuntos de datos a la izquierda y a la derecha de acuerdo con el tamaño de este valor. El valor del conjunto de datos de la izquierda es más pequeño que este valor, y viceversa
  • Llame recursivamente a los datos en ambos lados Paso 1
  • Combinar todos los datos

Implementación del algoritmo de clasificación rápida

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

dieciséis

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

void main() {

  List<int> quickSort(List<int> arr) {

    // 处理边界问题

    if (arr.length <= 1) {

      return arr;

    }

    // 取出第一个值作为参考

    int splitData = arr[0];

    // 小于参考值的集合

    List<int> low = [];

    // 大于参考值的集合

    List<int> hight = [];

    // 与参考相等的集合

    List<int> mid = [];

    // 初次把参考值添加到mid中

    mid.add(splitData);

    for (int i = 1; i < arr.length; i++) {

      if (arr[i] < splitData) {

        // 小于

        low.add(arr[i]);

      } else if (arr[i] > splitData) {

        // 大于

        hight.add(arr[i]);

      } else {

        // 等于

        mid.add(arr[i]);

      }

    }

    // 二分数据后,再继续递归整理

    low = quickSort(low);

    hight = quickSort(hight);

    // 最后合并

    return [...low, ...mid, ...hight];

  }

  const List<int> ary = [4, 5, 1, 3, 6, 2, 5, 6, 7, 2, 4];

  print(quickSort(ary));

}

¡Hasta ahora, hemos revisado el  algoritmo de clasificación rápida  !

 

Reenviado de: Micro lectura    https://www.weidianyuedu.com

Supongo que te gusta

Origin blog.csdn.net/weixin_45707610/article/details/131864566
Recomendado
Clasificación