Directorio de artículos
prefacio
Este año, la Copa Lanqiao no obtuvo el primero provincial, así que decidí establecerme para aprender el algoritmo, para facilitar el aprendizaje del algoritmo.estable, así que lo recogí, la mayoríabasico y clasicoUn libro de algoritmos "Algoritmo Aha", y decidí escribir mi proceso de aprendizaje como un blog para registrar y compartir.
1. Algoritmo de clasificación
Ordenamiento de burbuja
El más lento, y se usa cuando hay menos datos, la complejidad del tiempo es O(n^2)
tipo de cubeta
La complejidad del tiempo es la más baja, es decir, la velocidad es rápida, es O(N + C), N es el número de ciclos, C es N*(logN - logM) y M es el número de cubos. se puede ver el final de la primera sección de este libro
ordenación rápida
La complejidad del tiempo es O(N*logN), similar a la clasificación sort() de la función, que también es la clasificación que se usa a menudo en futuras competencias de algoritmos. La idea principal es dividir y conquistar
2. Clasificación de cubeta
La clasificación de cubos, como su nombre lo indica, necesita configurar muchos cubos o contenedores. Obviamente, puede ser una matriz en la computadora, por lo que cuando clasificamos 0 ~ 2e9 (2 10 9), necesitamos 2 * 10 9 cubos , es decir, aplicar para 2 10^ 9 variables, incluso si solo se ordenan 3 números, todavía se necesita un espacio tan grande, lo cual es un desperdicio.
ej.: Los números en las banderas obtenidos por los cinco niños son 5 3 5 2 8 respectivamente, y luego se le pide que los clasifique de mayor a menor
#include<iostream>
using namespace std;
int book[10];//全局变量 自动 初始化为0
int main()
{
int t;
for(int i=0;i<5;i++)//输入五个数字
{
cin>>t;//输入的数字
book[t]++;//出现的数字次数++
}
for(int i=8;i>=0;i--)//i定义为分数
for(int j=0;j<book[i];j++)//分数出现的次数
cout<<i<<" ";
return 0;
}
Los datos son los siguientes
输入:5 3 5 2 8
输出:8 5 5 3 2
3. Clasificación de burbujas
Tipo de burbuja también conocido comoOrdenamiento de burbuja, el principio es comparar dos elementos adyacentes cada vez e intercambiarlos si el orden es incorrecto.
Escribí el código sobre la clasificación de burbujas muchas veces cuando estaba aprendiendo lenguaje C. Para más detalles, puede ir al blog C language—array—summary
Por ejemplo: ahora hay 5 estudiantes cuyas puntuaciones deben ordenarse de mayor a menor. Las puntuaciones son 89 90 69 100 67
#include<iostream>
using namespace std;
int score[6];//全局变量自动初始化为0
int i,j;
int main()
{
for(i=0;i<5;i++)//五次输入
cin>>score[i];
for(i=0;i<5-1;i++)//冒泡排序的趟数
for(j=0;j<5-1-i;j++)
{
if(score[j]<score[j+1])//交换
{
int tmp=score[j];
score[j]=score[j+1];
score[j+1]=tmp;
}
}
//输出
for(i=0;i<5;i++) cout<<score[i]<<" ";
cout<<endl;
return 0;
}
Los datos son los siguientes
输入:89 90 69 100 67
输出:100 90 89 69 67
3. Clasificación rápida
Explicación de conocimiento de clasificación rápida:
La idea central de clasificación rápida :Basado en divide y vencerás
El contenido principal de ordenación rápida es:
-
Determine el punto de corte: q[L],q[(L+R)/2],q[R]
其实就是分为左边界,中间值和右边界,甚至随机一个数
-
ajustar el intervalo,
其实就是把元素放到x的两侧
-
Procese recursivamente los párrafos izquierdo y derecho.
El siguiente es elExplicar el intervalo de ajuste del paso 2
-
Dos punteros, i, j se mueven constantemente aquí
-
cuando el puntero iCuando el elemento puntiagudo <= x, el puntero se mueve hacia la derecha,De manera similar, cuando el puntero j encuentra >=x,puntero se mueve hacia la izquierda
-
cuando señaloDeténgase cuando el elemento puntiagudo >= x, espera hasta que el puntero jDeténgase cuando el elemento puntiagudo <= x
-
Finalmente hice estoSe intercambian e intercambian dos elementos.
Lo anterior es el conocimiento básico de clasificación rápida., algunos ejercicios se explicarán a continuación.Consolidar y practicarLo que sabemos
Mapa de pensamiento de fila rápida:
Para obtener más información, consulte las notas del algoritmo acw que escribí [algoritmo] Curso básico de algoritmo - Algoritmo de clasificación (con notas | colección recomendada)
Resumir
Los algoritmos son ciertamente difíciles, pero no todos son muy buenos al principio, ¡sino solo cuando comienzan! ! !