Desenvolva um hábito, goste primeiro e depois assista !!!
Seus gostos e atenção me ajudam muito. Se puder, mova os dedos, três conexões com um clique !!!
índice
1. Os critérios de avaliação do algoritmo
Antes de explicar o algoritmo de classificação, vamos primeiro entender de quais ângulos um algoritmo é geralmente julgado.
Qualquer pessoa que conheça um pouco de algoritmo deve saber disso . Esses dois padrões são 时间复杂度
e空间复杂度
-
时间复杂度
Complexidade de tempo, na verdade é muito fácil de entender. Pelo significado literal, podemos entender bem, ou seja, quanto tempo todo o algoritmo leva para ser executado. Existem mais dois critérios para essa complexidade de tempo. Na verdade, é estrito Dito isso, há três最好
casos平均
, as最坏
circunstâncias , mas geralmente não discutimos a melhor situação, porque isso não faz sentido, então geralmente discutimos o caso médio e o pior caso.E, em circunstâncias normais, a complexidade do tempo é o que mais prestamos atenção. Afinal, geralmente nos preocupamos com a rapidez com que o software é executado em nossa vida diária. Seja rápido ou lento, a experiência do usuário será especial. Ruim. Não geralmente digo como essa coisa consome meu espaço de memória.
Em segundo lugar Outro ponto é
时间复杂度
uma manifestação de um最核心
local de algoritmo , afinal, uma complexidade espacial um pouco maior é aceitável, mas se a complexidade de tempo do algoritmo não cair, mesmo que não haja espaço é como o Canadá não pode resolver o problema. -
空间复杂度
A complexidade do espaço é realmente bem compreendida. Refere-se a quanto内存空间
espaço é ocupado durante a execução do algoritmo . Geralmente, nem todos se preocupam particularmente com a complexidade do espaço. Mas aqui está um exemplo de estrutura de dados, todos Você pode compreender imediatamente este conceito.Esta estrutura de dados é HashMap, que é uma estrutura de dados que o espaço sacrifícios por vez. Mapa puder
直接获取到你想要键的元素
.Sabendo que o HashMap é tão poderoso, todos saberão por que as grandes empresas costumam pedir o código-fonte do HashMap quando perguntam sobre o código-fonte da estrutura de dados, pois seu desenho dessa forma é realmente uma fraude.
2. Classificação de algoritmos de classificação
Depois de entender os critérios de avaliação dos algoritmos acima, precisamos ver como esses algoritmos de ordenação são classificados.Existem
basicamente dois métodos de classificação.
排序类型
A comparação aqui é a mesma que todos normalmente entendem, ou seja, é principalmente ordenada por comparação.
是否稳定
A estabilidade aqui precisa ser informada um pouco com todos. A estabilidade aqui se refere a se a posição relativa do mesmo elemento após a classificação é a mesma antes da classificação. Se não houver alteração, o algoritmo é considerado estável. Se você diz isso, talvez não consiga entender muito bem. Aqui ainda usamos a figura a seguir para ajudá-lo a aprofundar sua impressão. Depois de
entender os conceitos acima, poderemos entender melhor alguns dos conceitos propostos quando explicarmos o algoritmo de classificação. Entendido.
3. Dez algoritmos de classificação clássicos - classificação por bolha, classificação por seleção, classificação por inserção
3.1- Classificação de bolhas
算法思想
:
Por falar em borbulhamento, a primeira reação de todos pode ser que os peixes dourados cuspindo bolhas na imagem
abaixo, podemos ver na tela, as bolhas são maiores à medida que sobem. Esta é a ideia central da classificação por borbulhamento: toda vez que você faz um loop , encontre um valor máximo ou mínimo na sequência ordenada restante e substitua-o no final da sequência ou no início da sequência. Pegue o seguinte exemplo simples, todos podem entender:
isto é um risco A ideia básica da bolha sort. E podemos resumir brevemente as características do tipo de bolha:
- A posição final de pelo menos um elemento pode ser determinada para cada classificação
- A classificação BubblingBubble é estável e , somente quando os elementos estão
大小不一样
dentro,交换位置
a posição relativa do mesmo elemento permanece inalterada antes e depois da classificação, portanto, a classificação por bolhas é estável. - Bubble Sort tem um caso extremo , se temos um conjunto é uma espécie
从大到小
de , mas o fim da sequência original é从小到大
o caso , então os pequenos parceiros vai achar que desta vez, nós cada比较元素之后
necessidade destes两个元素进行交换
. Esta é a bolha caso tipo A mais extrema situação.
算法图解
:
示例代码
:
public static void main(String[] args) {
int []num ={
7,4,9,3,2,1,8,6,5,10};
long startTime=System.currentTimeMillis();
for(int i=0;i<num.length-1;i++) {
for(int j=0;j<num.length-1-i;j++) {
if(num[j]>num[j+1]) {
int temp=num[j+1];
num[j+1]=num[j];
num[j]=temp;
}
}
System.out.print("第"+(i+1)+"次排序结果:");
for(int j=0;j<num.length;j++)
System.out.print(num[j]+" ");
System.out.println();
}
long endTime=System.currentTimeMillis();
System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
}
复杂度分析
:
Depois de compreender a ideia básica da classificação de bolhas, precisamos analisar sua complexidade de tempo e complexidade de espaço.
-
Complexidade do
tempo Julgamos a complexidade do tempo a partir de dois aspectos- Caso
médio, a complexidade média do caso do nosso algoritmo ocorre principalmente durante o processo de comparação de elementos. Nomeadamente noif(num[j]>num[j+1])
processo, que em média é duas vezes o nosso loop for, que calculamos será capaz de chegar a Shin*(n-1)/2
, vamos O maior número de vezes, você pode ver que a complexidade do tempo éO(n*n)
- O pior caso O
pior caso é o caso extremo que mencionamos acima. Mas o caso extremo é apenas que a troca de elementos é realizada mais do que nosso caso médio, mas o número de comparações é sempre o mesmo, então a complexidade do tempo também é calculada como issoO(n*n)
- Caso
-
Complexidade do espaço
Também podemos ver que adicionamos um espaço ao valor em todo o processo de classificação. Esse espaço é definido por nós temp
, principalmente para nos ajudar a trocar elementos. Portanto, a complexidade do espaço da classificação por bolhas éO(1)
3.2- Classificação de seleção
算法思想
:
A chave para escolher a classificação é escolher. A maneira de escolher é selecionar o menor elemento em cada loop e, em seguida, substituir o menor elemento pelo elemento principal na sequência de classificação. Ainda o mesmo, deixe todos melhorarem através da seguinte figura esta compreensão de um processo de seleção:
esta é a nossa compreensão básica dos conceitos básicos será capaz de escolher onde ordenamos. A necessidade de distinguir entre o tipo superior e tipo bolha é escolher o tipo na posição 比较结束
e após 不会直接交换两个元素
a posição, 只是记录
o menor elemento do sequência atual , depois de encontrar o menor elemento, substitua o menor elemento pelo elemento no início da linha. Depois de
entendê-los, vamos também falar sobre as características da ordenação por seleção:
每次循环
Deve ser capaz de determinar um elemento最终位置
, que é o mesmo que classificação por bolha- A ordem de seleção também é
不稳定的
verdadeira. Você pode não entendê-la aqui, mas ainda a entendemos por meio da seguinte imagem para ocultá-la:
算法图解
:
示例代码
:
public static void main(String[] args) {
int []num ={
7,4,9,3,2,1,8,6,5,10};
long startTime=System.currentTimeMillis();
for(int i=0;i<num.length-1;i++) {
int min=i;
for(int j=i+1;j<num.length;j++) {
if(num[min]>num[j]) {
min=j;
}
}
if(i!=min) {
int temp=num[i];
num[i]=num[min];
num[min]=temp;
}
System.out.print("第"+(i+1)+"次排序结果:");
for(int j=0;j<num.length;j++)
System.out.print(num[j]+" ");
System.out.println();
}
long endTime=System.currentTimeMillis();
System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
}
复杂度分析
:
Depois de compreender a ideia básica de seleção e classificação, precisamos analisar sua complexidade de tempo e complexidade de espaço.
-
Complexidade do
tempo Julgamos a complexidade do tempo a partir de dois aspectos- Caso
médio, a complexidade média do caso do nosso algoritmo ocorre principalmente durante o processo de comparação de elementos. Nomeadamente noif(num[min]>num[j])
processo, que em média é duas vezes o nosso loop for, que calculamos será capaz de chegar a Shin*(n-1)/2
, vamos O maior número de vezes, você pode ver que a complexidade do tempo éO(n*n)
- O pior caso e o
pior caso são essencialmente os mesmos que o nosso caso médio, porque independentemente do caso médio ou do pior caso, apenas a posição do menor elemento e a ponta da linha são substituídas no final, e o número de as comparações são iguais, então a complexidade do tempo também éO(n*n)
- Caso
-
Complexidade do espaço
Também podemos ver que o valor de todo o nosso processo de classificação aumentou em dois espaços. Este espaço é a temp
soma que definimos min
, portanto a complexidade do espaço da classificação por seleção também é constante.O(1)
3.3- Classificação de inserção
算法思想
:
A ideia algorítmica da classificação por inserção é dividir a sequência inteira em dois segmentos, uma sequência que foi classificada no momento e a outra sequência final ainda não é necessária. Por exemplo, conforme mostrado na seguinte figura: Depois
dividindo essas duas sequências, insira a sequência Cada vez, o elemento principal da sequência a ser classificada é selecionado e inserido na sequência da ordem, começando do final da sequência ordenada, e se for maior que o elemento, o elemento é movido para trás, uma vez que é menor que o elemento O elemento é inserido na posição atual.Esta é a origem do nome de classificação de inserção.
Depois de muito tempo falando, todos podem ainda não entender. Vamos explicar o processo de execução do algoritmo em detalhes por meio da figura a seguir: Depois de
entender a ideia básica do algoritmo de ordenação por inserção, vamos dar uma olhada nas características do o algoritmo:
- Na verdade, isso não é um recurso , mas depois de comparar com os dois algoritmos acima, você pode descobrir que esse algoritmo não é como o borbulhamento e classificação de seleção acima, cada classificação de ciclo pode determinar a posição final de um elemento. Classificação de inserção de cada classificação de ciclo Após isso é não
能够唯一确定一个元素的最终位置的
. Ele só pode ser após cada ciclo确定一些元素的相对位置
. - A classificação por inserção e a classificação por bolha têm uma situação de classificação extrema , mas a situação extrema da classificação por bolha é a pior, mas a situação extrema da classificação por inserção é a mais legal. Ou seja, quando a sequência é basicamente ordenada, a classificação por inserção é a mais rápida , e a complexidade de tempo pode ser alcançada
O(n)即线性级别
. Porque uma vez que a sequência é ordenada,for循环仍然需要执行
mas emwhile循环里面就根本不用执行了
, esta é a chave para o nível linear de classificação por inserção. Comparando a classificação de borbulhamento e seleção, todas são两层for循环
realizadas, mas a inserção O segundo ciclo de a classificação é通过while并且有相应的终止条件
que isso torna o desempenho da classificação por inserção relativamente melhor do que as duas anteriores. É claro que é esse只存在于序列已经基本有序
o caso .
算法图解
:
示例代码
:
public static void main(String[] args) {
int []num ={
7,4,9,3,2,1,8,6,5,10};
long startTime=System.currentTimeMillis();
for(int i=1;i<num.length;i++) {
int temp=num[i];
int j=i;
while(j>0&&temp<num[j-1]) {
num[j]=num[j-1];
j--;
}
if(j!=i) {
num[j]=temp;
}
System.out.print("第"+i+"次排序结果:");
for(int k=0;k<num.length;k++)
System.out.print(num[k]+" ");
System.out.println();
}
long endTime=System.currentTimeMillis();
System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
}
复杂度分析
:
Depois de compreender a ideia básica do tipo de inserção, precisamos analisar sua complexidade de tempo e complexidade de espaço.
-
Complexidade do
tempo Julgamos a complexidade do tempo a partir de três aspectos, onde devemos mencionar os casos extremos que mencionamos acima.- Melhor caso A
complexidade do tempo pode atingir o nível linearO(n)
- Caso
médio, a complexidade média do caso do nosso algoritmo ocorre principalmente durante o processo de comparação de elementos. Nomeadamente notemp<num[j-1]
processo que, em média, um para nós é o número de ciclos e uma camada do loop while, que temos de ser capazes de calcular Outn*(n-1)/2
, vamos ao número máximo de vezes, podemos ver que a complexidade do tempo éO(n*n)
- Pior caso O
pior caso é essencialmente igual ao nosso caso médio, porque independentemente do caso médio ou do pior caso, o número de comparações é o mesmo, então a complexidade do tempo também éO(n*n)
- Melhor caso A
-
Complexidade do espaço
Também podemos ver que o valor de todo o nosso processo de classificação aumentou em dois espaços. Este espaço é a temp
soma que definimos j
, portanto a complexidade do espaço da classificação por seleção também é constante.O(1)
Ok, o compartilhamento de hoje acabou aqui, a palavra de código não é fácil e a originalidade não é fácil.
Se você acha que a escrita da UP está OK ou se acha que o artigo é útil para você, siga o relato oficial da UP. Os novatos UP precisam do seu apoio !!!
Se você não olhar para ele, você parece bem!
Continue assistindo, você parece melhor!