MERGE SORT | Algoritmos #7

Поділитися
Вставка
  • Опубліковано 17 гру 2024

КОМЕНТАРІ • 213

  • @leiaute
    @leiaute 5 років тому +62

    Professor, muito bom o seu vídeo, mas muito bom mesmo.
    Muito bem explicado, a qualidade do vídeo em si é boa e do áudio também.
    Cara, você está fazendo um trabalho heróico no UA-cam e no Brasil.

    • @pgdinamica
      @pgdinamica  5 років тому +3

      Muuuuuitíssimo obrigado! 🦸🏾‍♂️🦸🏾‍♀️

  • @gomeshg_
    @gomeshg_ Рік тому +1

    Bom demais!

  • @giovannao.p.7591
    @giovannao.p.7591 9 місяців тому +1

    a analogia das cartas me ajudou muito a visualizar a lógica do algoritmo! muito obrigada por disponibilizar conteúdo de qualidade sobre programação em pt-br aqui no yt

  • @ataide2003
    @ataide2003 3 роки тому +9

    Opa mestre, eu fui aluno do infnet EAD e se tivesse tido aula com você, nesse nivel de explicação provavelmente não teria abandonado a instituição! Gostaria de dizer que os vídeos estão excelentes e você explica de forma maravilhosa. Seguindo, dando like e compartilhando já! Parabéns!!!

    • @pgdinamica
      @pgdinamica  3 роки тому

      Obrigado pelo apoio, Anderson! Bons estudos!

  • @GabrielSCCP1237
    @GabrielSCCP1237 4 роки тому +13

    Excelente aula! Tinha que fazer a implementação em C e consegui mesmo a aula sendo em Python. Muito obrigado

    • @pgdinamica
      @pgdinamica  4 роки тому +1

      Parabéns! Sinal de que entendeu mesmo a essência do algoritmo. A ideia, o conceito, tem que ser independente de linguagem :) Quando eu fiz o curso na faculdade, também foi em C.

    • @lucasfigueiredo8518
      @lucasfigueiredo8518 3 роки тому

      Estou fazendo exatamente a mesma coisa e tá dando super certo! Canal excelente! ❤️

  • @assisvt
    @assisvt Рік тому +1

    Cara tu é um professor incrível q didática!!!

  • @danrlady
    @danrlady 5 років тому +2

    Hallison, muito obrigado por essa aula! Finalmente consegui entender como implementar esse algoritmo.
    Parabéns pela didática!

    • @pgdinamica
      @pgdinamica  5 років тому

      Muito obrigado! Fico feliz que esteja ajudando!

  • @robertmillerlinodossantos3935
    @robertmillerlinodossantos3935 2 роки тому +1

    Sua série de vídeos de algoritmos tem me ajudado muito. Obrigado, @Programação Dinâmica

    • @pgdinamica
      @pgdinamica  2 роки тому +1

      Que ótimo saber disso! Bons estudos!

  • @RIANDENORONHAGOMESDASILVA
    @RIANDENORONHAGOMESDASILVA 6 місяців тому

    Brabo, explicação incrível.

  • @Pedro_Nora
    @Pedro_Nora Місяць тому

    Revendo após alguns anos... conteúdo sempre muito válido.

  • @estevaomendes2305
    @estevaomendes2305 3 роки тому +5

    Ótimo vídeo, muito bem explicado. A ideia do algoritmo é intuitiva vendo de uma perspectiva de árvore, mas a recursão sempre me da um nó na cabeça, kkk. Quero tentar implementar isso agora em C/C++

  • @PeacemakerTheGreat
    @PeacemakerTheGreat 4 роки тому +1

    Cara, conteúdo extremamente bem entregue, parabéns. Não vi nenhum outro vídeo no yt, nem em outras línguas, que explique tão bem a implementação, valeu!

    • @pgdinamica
      @pgdinamica  4 роки тому

      Fico feliz com o reconhecimento :D

  • @davijatoba6647
    @davijatoba6647 3 роки тому

    Sensacional!!!!

  • @Pedro_Nora
    @Pedro_Nora 4 роки тому +1

    Sempre o lugar mais fácil de entender os assuntos que os outros possuem dificuldade para explicar!!!

    • @pgdinamica
      @pgdinamica  4 роки тому +1

      👏🏾👏🏾 valeu! Ah, ficou ótimo o seu nome com esse selo verde hein 😊

  • @luiz8100
    @luiz8100 5 місяців тому

    Excelente aula parabéns professor, Deus abençoe ❤

  • @pedemoleque8632
    @pedemoleque8632 Рік тому

    você e seus vídeos foram e são exatamente o que eu estava precisando... muito obrigada!

  • @patrickcarneiro4646
    @patrickcarneiro4646 3 роки тому

    Muito didático. Me inscrevi, muito obrigado!

  • @guilhermeaco
    @guilhermeaco Рік тому

    Excelente vídeo

  • @annapaula3070
    @annapaula3070 Рік тому

    Muito didático ! Parabéns! 🙌

  • @carlosfernando6739
    @carlosfernando6739 3 роки тому

    Parabéns! Achei que não iria conseguir encontrar alguém que conseguisse explicar esse algoritmo de forma simples e com uma boa didática.

    • @pgdinamica
      @pgdinamica  3 роки тому +1

      Obrigado! Bons estudos ✌🏾

  • @rgranvilla
    @rgranvilla 4 роки тому

    Obrigado Hallison! O seu material tem sido uma fonte fantástica para meu aprendizado.

  •  Рік тому

    Muito bem. Que aula sensacional!

  • @luizaraujo6747
    @luizaraujo6747 Рік тому

    Aula é top de mais to gostando mais que minhas aulas faculdade.... didática é incrível

    • @pgdinamica
      @pgdinamica  Рік тому

      Obrigado! Fico feliz que esteja gostando :)

  • @gabrielapaulinideutner3180
    @gabrielapaulinideutner3180 6 місяців тому

    Aula incrível!

    • @pgdinamica
      @pgdinamica  6 місяців тому +1

      Muito obrigado!

    • @gabrielapaulinideutner3180
      @gabrielapaulinideutner3180 6 місяців тому

      @@pgdinamica eu fiz um passo a passo para debugar o algoritmo no Jupyter e conseguir entender melhor a lógica, vou compartilhar aqui caso ajude alguém haha
      def mergesort(lista, inicio=0, fim=None):
      if fim is None:
      fim = len(lista)
      if (fim - inicio > 1):
      meio = (fim + inicio) // 2
      print(f"Dividindo: {lista[inicio:fim]} em {lista[inicio:meio]} e {lista[meio:fim]}")
      mergesort(lista, inicio, meio)
      mergesort(lista, meio, fim)
      merge(lista, inicio, meio, fim)
      def merge(lista, inicio, meio, fim):
      left = lista[inicio:meio]
      right = lista[meio:fim]
      top_left, top_right = 0, 0
      print(f"Merging: {left} e {right}")
      for k in range(inicio, fim):
      if top_left >= len(left):
      lista[k] = right[top_right]
      top_right = top_right + 1
      elif top_right >= len(right):
      lista[k] = left[top_left]
      top_left = top_left + 1
      elif left[top_left] < right[top_right]:
      lista[k] = left[top_left]
      top_left = top_left + 1
      else:
      lista[k] = right[top_right]
      top_right = top_right + 1
      print(f"Resultado do merge: {lista[inicio:fim]}")
      # Lista a ser ordenada
      lista_ = [4, 7, 2, 6, 4, 1, 8, 3]
      # Imprimindo a lista antes da ordenação
      print("Lista antes da ordenação:", lista_)
      # Chamando a função mergesort
      mergesort(lista_)
      # Imprimindo a lista após a ordenação
      print("Lista após a ordenação:", lista_)
      A saída no console do Jupyter ficou assim:
      Lista antes da ordenação: [4, 7, 2, 6, 4, 1, 8, 3]
      Dividindo: [4, 7, 2, 6, 4, 1, 8, 3] em [4, 7, 2, 6] e [4, 1, 8, 3]
      Dividindo: [4, 7, 2, 6] em [4, 7] e [2, 6]
      Dividindo: [4, 7] em [4] e [7]
      Merging: [4] e [7]
      Resultado do merge: [4, 7]
      Dividindo: [2, 6] em [2] e [6]
      Merging: [2] e [6]
      Resultado do merge: [2, 6]
      Merging: [4, 7] e [2, 6]
      Resultado do merge: [2, 4, 6, 7]
      Dividindo: [4, 1, 8, 3] em [4, 1] e [8, 3]
      Dividindo: [4, 1] em [4] e [1]
      Merging: [4] e [1]
      Resultado do merge: [1, 4]
      Dividindo: [8, 3] em [8] e [3]
      Merging: [8] e [3]
      Resultado do merge: [3, 8]
      Merging: [1, 4] e [3, 8]
      Resultado do merge: [1, 3, 4, 8]
      Merging: [2, 4, 6, 7] e [1, 3, 4, 8]
      Resultado do merge: [1, 2, 3, 4, 4, 6, 7, 8]
      Lista após a ordenação: [1, 2, 3, 4, 4, 6, 7, 8]

  • @joaorobjr
    @joaorobjr 4 роки тому

    Explicação clara e eficiente capaz de tornar um assunto complexo (no meu caso) em algo menos obscuro. Obrigado pelo excelente trabalho.

  • @joaogondim1934
    @joaogondim1934 3 роки тому

    excelente aula!

  • @luizalmeida4884
    @luizalmeida4884 4 роки тому

    Explicação fácil e concisa. Ja ganhou um assinante

  • @wesleylima7891
    @wesleylima7891 Рік тому

    cara maravilhoso a aula simplificou na minha cabeça obrigado

  • @h1rosajr
    @h1rosajr 2 роки тому

    Quebra tudo! Bem bolado Professor.

  • @haydendev
    @haydendev 3 роки тому

    Obrigado prof

  • @Weignater
    @Weignater Рік тому

    Muito bom mesmo! Obrigado!

  • @viniciusgajo1884
    @viniciusgajo1884 Рік тому

    Muito bom o vídeo, ótima explicação!

  • @eds6352
    @eds6352 3 роки тому

    Excelentes vídeos.... parabéns

    • @pgdinamica
      @pgdinamica  3 роки тому

      Valeu! Bons estudos 🙌🏾

  • @lifesourcecode
    @lifesourcecode 2 роки тому

    Muito bom e didático. Muito obrigado pelo vídeo.

  • @mushroom0909ify
    @mushroom0909ify 2 роки тому

    Show demais viu, didática maravilhosa.

    • @pgdinamica
      @pgdinamica  2 роки тому

      Muito obrigado, bons estudos!

  • @lolinakashima3296
    @lolinakashima3296 3 роки тому

    Gosto muito da sua metodologia. Nunca mude, por favor 😁

  • @TheAndozio
    @TheAndozio 4 роки тому

    Obrigado caro. ótimo vídeo.

  • @danilobucker
    @danilobucker 4 роки тому

    Excelente aula.

  • @engcre
    @engcre 2 роки тому

    Valeu cara, me ajudou muito

    • @pgdinamica
      @pgdinamica  2 роки тому

      Fico feliz em saber! Sucesso!

  • @JOSECARLOS-wk8ru
    @JOSECARLOS-wk8ru 4 роки тому

    Muito bom,, áudio,,,, explicação,,,,, excelente,, parabéns,,,,,,,,,

  • @esdrasuchoa4860
    @esdrasuchoa4860 4 роки тому

    obrigado suas explicações estao me ajudando em um trabalho pra faculdade,cê é 10

  • @pauloricardomaltaleal3558
    @pauloricardomaltaleal3558 2 роки тому

    Conteúdo de altíssima qualidade!!

  • @beasousa8497
    @beasousa8497 4 роки тому

    cara muito bom o seu vídeo sua explicação é excelente, tornou um assunto tão difícil em algo extremamente simples, parabéns, amei aula

  • @pedro.balbino
    @pedro.balbino 3 роки тому

    Professor muito bom!

  • @lucas404x
    @lucas404x 4 роки тому

    Sensacional. Tava com dificuldade em entender esse algoritmo. Valeu, galera!

  • @alexandredesiqueiramelojun9976
    @alexandredesiqueiramelojun9976 4 роки тому

    Esse canal me ajuda muito, valeu

  • @lucabrito6155
    @lucabrito6155 4 роки тому

    Estou começando a entender este algoritmo, muito obrigado. Sou auto-didata e estou tentando aprender esse algoritmos.

    • @pgdinamica
      @pgdinamica  4 роки тому

      Show, Lucas, bom saber! Bons estudos!

  • @nandoscottimuzzi95
    @nandoscottimuzzi95 Рік тому

    Boa noite Halisson!!
    obrigado pelo conteúdo. Já temos o video de analise de complexidade do MergeSort e QuickSort ?

  • @VictorLellis
    @VictorLellis 3 роки тому

    Muito boa a explicação, obrigado. Me ajudou bastante.

  • @linuxhopper6947
    @linuxhopper6947 5 років тому +1

    Vcs salvam demais, MUITO OBRIGADO!!

  • @mateus18silva
    @mateus18silva 5 років тому +1

    Cara voce é muito bom sz

  • @thiago_predolin
    @thiago_predolin 4 роки тому

    Cara, excelente. Parabéns. Abraço.

  • @JoaoVitor-st9pg
    @JoaoVitor-st9pg 4 роки тому

    Muito bom o vídeo, parabéns pela explicação

  • @matheuscosta5330
    @matheuscosta5330 3 роки тому

    Explicação como sempre, boa demais!!

  • @Laura-bd2we
    @Laura-bd2we 4 місяці тому

    Obrigada pela aulas! eu não estava conseguindo entender mesmo lendo os slides do professor e você me ajudou ❤ tbm adoro ver pessoas pretas na área (tbm sou preta)

    • @pgdinamica
      @pgdinamica  4 місяці тому

      ✊🏾 🙌🏾 é nós por nós!

  • @drekki1709
    @drekki1709 3 роки тому

    Parabéns pelo conteúdo! Vc é muito bom!

  • @henriquecastro2032
    @henriquecastro2032 4 роки тому

    Muito bom o conteúdo! Me ajudou muito com um trabalho em C !

  • @adrielvolzzisales2851
    @adrielvolzzisales2851 2 роки тому

    Tu e fera

  • @victorpinasarnault7910
    @victorpinasarnault7910 4 роки тому

    Nossa, explicou de uma maneira mais simples que o meu professor. Eu não consegui entender muito bem o código porque não estou acostumado com Python; utilizamos Java na faculdade. Mas a explicação do algoritmo ficou bem simples mesmo.

  • @programarearte
    @programarearte 2 роки тому

    Preciso desenvolver uma ordenação aqui hoje. Passei pra relembrar que ja nao fazia mais ideia de como implementar. KKKKKK bem explicado parabéns.

  • @gabrielmachado2456
    @gabrielmachado2456 3 роки тому

    Vídeo fantástico😍, muito bem explicado e me ajudou muito. Obrigado!

  • @gabriel__kr0307
    @gabriel__kr0307 4 роки тому

    Muito bom o vídeo. Explicação bem top .agora é só eu passar para java . Procurei a internet toda finalmente achei um vídeo que dá para entender bem .ótimo trabalho 👏👏👏

  • @danielecavalcante4363
    @danielecavalcante4363 4 роки тому

    muito bom!

  • @lipo971
    @lipo971 4 роки тому

    Muito bom o vídeo amigo. Me ajudou bastante.

    • @pgdinamica
      @pgdinamica  4 роки тому +1

      Que ótimo! Fico feliz 😁

  • @brunobm84
    @brunobm84 4 роки тому

    Nem começou o vídeo e já vou "sapecando" like porque sempre vem coisa boa nos vídeos desse casal gente boa e competentíssimo 👏🏻👏🏻👏🏻 Parabéns pelo canal que a cada dia vem ficando mais robusto com conteúdos de grande valor 🙏🏻🙏🏻🙏🏻 #gratidao #sucesso

  • @jonastibulo9647
    @jonastibulo9647 4 роки тому

    Seus vídeos são ótimos, parabéns!!!

  • @lucasacelino
    @lucasacelino 2 роки тому

    Conteúdo excelente. Sempre aqui aprendendo algoritmos. Halisson, você poderia me explicar a nuance do pior e melhor caso do mergesort, além da análise da complexidade, por exemplo: O porquê do melhor caso e o porquê do pior caso? O que difere entre melhor caso e o pior caso. Questões de comparações, chamadas recursivas e dentre outras rotinas.

  • @BigWorld42
    @BigWorld42 3 місяці тому

    Como que você tem a coragem de falar uma coisa dessa???????
    Cheguei aqui no seu canal PQ precisava entender o merge sort e me deparo com esse vídeo seu muito bem explicado.
    Aí quando vou olhar o canal para me inscrever, vejo que já tem 200 mil inscritos.
    A pergunta inicial foi só para chamar a atenção. Você está de parabéns e merece cada curtida nos seus vídeos!!

    • @pgdinamica
      @pgdinamica  3 місяці тому +1

      Obrigado, seja bem-vindo!

  • @rafaelacordeiro6930
    @rafaelacordeiro6930 4 роки тому

    Excelente! Super didático! Inscrita!

  • @Klysman08
    @Klysman08 5 років тому +1

    Fala, mestre!
    Bom demais suas aulas, acompanho o canal já tem bastante tempo, gosto muito da maneira como você expõe o conhecimento sobre esses assuntos.
    Queria saber se a playlist Estruturas de Dados e Algoritmos está ordenada, estou meio confuso para seguir os vídeos.
    Abraços!

    • @pgdinamica
      @pgdinamica  5 років тому +1

      Oi, Klysman Rezende, muito obrigado!
      Obrigado por chamar a atenção quanto a essa playlist. Reorganizamos ela apenas com os vídeos de "Estruturas de Dados" (tudo ordenado!). Há uma outra playlist chamada 'Projeto e Análise de Algoritmos" que contém os vídeos específicos sobre algoritmos (até o momento abordamos apenas ordenação).
      []s

  • @pxgx0
    @pxgx0 4 роки тому

    Sou seu fan

  • @PedroHenrique-jj6kn
    @PedroHenrique-jj6kn 9 місяців тому

    genioooo

  • @cadu7698
    @cadu7698 4 роки тому

    Ajudou d+, estava num sufoco aqui.

  • @vonbruhh
    @vonbruhh 4 роки тому

    8:30 , kk justamente o que eu tava pensando.

    • @pgdinamica
      @pgdinamica  4 роки тому

      Hahahaha, você vai ver que esse tipo de ideia se repete em muitas outras situações na computação, talvez quem pensou no Mergesort não tenha sido o primeiro 😆

  • @cleversonsousa53
    @cleversonsousa53 11 місяців тому

    Boa tarde, tudo bem? Sou fã do seu canal, poderia me dizer se caso tenha uma ocorrência, que no meu caso seria de um array, cujo tamanho seja impar o algoritmo proposto no vídeo não iria funcionar?

    • @pgdinamica
      @pgdinamica  11 місяців тому

      Não sei se entendi a pergunta. Se a pergunta for:
      "Este algoritmo funciona quando o tamanho do array é ímpar?"
      - Sim.
      "Este algoritmo funciona quando há um número ímpar de ocorrências de quaisquer que sejam os elementos no array?"
      - Sim.
      Dada uma estrutura de alocação de memória sequencial (array, lista...) com elementos cuja ordem entre eles é bem definida (é sempre possível saber quem é maior/menor que quem), este algoritmo ordena os elementos da estrutura.

    • @cleversonsousa53
      @cleversonsousa53 11 місяців тому

      @@pgdinamica Entendi, obrigado

  • @Gustavo-fd4st
    @Gustavo-fd4st 4 роки тому

    Conheci agora e to doido pra ser membro do canal 🤗

  • @FelipeSantos-rz1ro
    @FelipeSantos-rz1ro 5 років тому +2

    Vc pode fazer um vídeo sobre o quicksort?

    • @pgdinamica
      @pgdinamica  5 років тому +1

      Sim! Quinta ou sexta sai ;)

    • @pgdinamica
      @pgdinamica  5 років тому +2

      @Felipe Santos, ficou pronto agora (quase meia-noite 😱)! Por estar tarde, agendaremos para amanhã, fique ligado ;)

  • @jackienascimento_
    @jackienascimento_ 4 роки тому

    As suas explicações me salvaram!

    • @pgdinamica
      @pgdinamica  4 роки тому

      🙌🏾🙌🏾 bons estudos! :)

  • @Gustavo-fd4st
    @Gustavo-fd4st 4 роки тому +1

    Olá. Conheci o canal agora por esse vídeo e vou maratonar os videos. Quero ser educador nessa area. Estou estudando programação durante a pandemia pq eu iria iniciar a faculdade de S. I. no 3 período de 2020. então tô pegando as coisas antecipadamente, conheço até vetores/matrizes/strings porem somente em c. Poderia recomendar livros de linguagem C?

    • @pgdinamica
      @pgdinamica  4 роки тому

      Olá, seja bem vindo! Dá uma olhada em “Linguagem C” de Luís Damas

  • @kendao7894
    @kendao7894 3 роки тому

    Qual é o melhor algoritmo de ordenação na opinião de vocês? E por quê?
    O vídeo ficou show de bola!

    • @pgdinamica
      @pgdinamica  3 роки тому

      Tá fazendo trabalho da faculdade? 👀

    • @kendao7894
      @kendao7894 3 роки тому

      @@pgdinamica Que nada, hahaha... só pra saber a opinião de vocês mesmo.
      Vi alguns vídeos na internet e não consigo chegar em uma conclusão, estou entre o quick sort e o merge sort.

  • @victoralves5585
    @victoralves5585 4 роки тому

    Vídeo muito bom e muito bem explicado! Preciso só de ajuda com a complexidade de tempo desse algoritmo de ordenação, conseguiria fazer uma breve explicação dando como exemplo a lista de 8 números do início do vídeo? Obrigado :D

    • @gustavovalente6423
      @gustavovalente6423 Рік тому

      complexidade do merge sort eh de nlogn, na linha i de recursão temq unir 2^i vetores ordenados de tamanho n/2^i, dai qnd dividir o vetor no meio c m sendo a quantidade de linhas, fica n/2^m=1, isolando o m da logan em cada linha, mas você tem que fazer isso n vezes, logo, a complexidade da nlogn

  • @raphael.portela
    @raphael.portela Рік тому

    boa noite Hall, mano , o cormen apresenta o merge sort pegando o tamanho dos dois arrays e tambem ele usa mais parametros, to meio confuso, ta dificil de pegar esse, eu to tentando entender no livro pra depois destrinchar esse video, o que voce acha q devo fazer?

  • @carlinhoshf9
    @carlinhoshf9 5 років тому

    Hallison, e nos casos em que a lista tivesse tamanho multiplo de 3? Por exemplo, 6. A lista seria dividida em duas de 3, mas como seria a divisão de cada uma dessas listas separadas de tamanho 3, em listas de tamanho 1, para em seguida, comparar cada uma dessas listas de tamanho 1 e construir novamente uma de tamanho 3?

    • @pgdinamica
      @pgdinamica  5 років тому +1

      Fala, Carlos! Nesse caso, um lado fica com apenas 1 elemento e para no próximo passo. O outro lado segue com 2 elementos e faz mais uma subdivisão. Esses 2 serão unidos de forma ordenada primeiro e, depois aquele sozinho se unirá à eles de forma ordenada.

  • @joaovictorassis426
    @joaovictorassis426 5 років тому

    Hallison, parabéns pelo video.
    Tenho uma duvida fora do contexto do video. Para data science, tu achar melhor Python ou R?

    • @pgdinamica
      @pgdinamica  5 років тому +1

      Fala, @João Victor Assis, tudo bem?
      A sua dúvida é bem frequente e tá totalmente no contexto do canal, apesar de não ser o assunto deste vídeo, hehe. Resolvemos escrever um artigo para respondê-la dando um pouco mais de detalhes que não caberia aqui. Confira no link: medium.com/programacaodinamica/python-ou-r-para-data-science-221aa5637122

    • @joaovictorassis426
      @joaovictorassis426 5 років тому

      @@pgdinamica Cara, muito obrigado. Virei mais fã ainda, só força!!!

  • @badaelaori
    @badaelaori 3 роки тому

    oi Professor, uma duvida: porque não pode usar len(lista) como parametro no minuto 18:05 ?

    • @sugaku9455
      @sugaku9455 Рік тому

      Pq se o fizesse, a função iria considerar a variável lista de escopo local (dentro da própria função), ou seja, a variável lista que está como parâmetro, e não a lista que é passada em si

  • @raniel0511
    @raniel0511 3 роки тому

    Assistido✔️
    Hallison por ele ser mais eficaz a complexidade dele é O(n)? Ele passa pelos elementos da lista várias vezes mas em quantidade menor e faz comparações, mas essas varias vezes que ele calcula as comparações não fariam a complexidade dele ser maior? Estou partindo do princípio que ele só vai fazer um loop for em uma condição (já que tem vários if elif else) então seria n vezes e não n².

    • @pgdinamica
      @pgdinamica  3 роки тому

      A complexidade do Merge Sorte é O(n*log(n)). Você pode pensar no logaritmo na base 2. Pra cada uma das n posições, você vê no máximo log(n) operações, pois está dividindo por 2 sucessivamente.

  • @agathaschroeder
    @agathaschroeder 2 місяці тому

    Oii professor tudo bem?Nunca é tarde demais para aprender kkkkk, a variável k seria o que exatamente?

    • @CosmosCSGO
      @CosmosCSGO Місяць тому

      Pelo oq eu entendi ela serve para armazenar a lista original temporariamente

    • @agathaschroeder
      @agathaschroeder Місяць тому +1

      @@CosmosCSGO ataaa, muito obrigada

  • @luisarcanjo1657
    @luisarcanjo1657 Рік тому

    Merge sort e buble sort da pra usar no java?

  • @petrusdemelodev
    @petrusdemelodev 4 роки тому

    Fala Hallison, tudo bom?
    Cara, eu tenho uma dúvida. Nesta segunda chamada recursiva do mergesort não deveríamos passar o parametro "meio" como sendo o valor "meio + 1" não? Já que o meio termina o mergesort anterior, devo começar do primeiro a seguir?

    • @pgdinamica
      @pgdinamica  4 роки тому +1

      Em Python, os intervalos (range) são fechados no início (inclui) e abertos no final (exclui). Em: "for k in range(inicio, fim):", k vai até fim-1.
      Na primeira chamada, "meio" entra como "fim", então vamos até "meio-1". Na segunda, entra como "incio", então começamos de "meio".

    • @petrusdemelodev
      @petrusdemelodev 4 роки тому

      @@pgdinamica excelente! Obrigado. Eu sou de javascript e java, dai não estou acostumado com esses detalhes rs

  • @leonardommartin9687
    @leonardommartin9687 2 роки тому

    Como eu faria o merge retornando um int com o numero de comparações na linguagem C? to quebrando a cabeça nisso tem 1 dia já...

    • @pgdinamica
      @pgdinamica  2 роки тому

      Você precisa de uma variável que armazena o número de comparações realizadas durante o merge. Como o procedimento é recursivo, você pode incrementar os valores com uma estratégia parecida com a que usamos no cálculo da altura de uma árvore binária: ua-cam.com/video/QC8oiQnlYos/v-deo.html

  • @raphael.portela
    @raphael.portela Рік тому

    to tentando escrever esse algoritmo em C, mas to preso na parte de dividir o array no meio por conta dos ponteiros, ja que pode ser numero par ou impar a quantidade de elementos, é bem mais demorado mas acho que eu abstraio melhor

    • @pgdinamica
      @pgdinamica  Рік тому +1

      Uma opção é dividir por 2 e fazer casting do resultado pra int. Desta forma, você sempre vai arredondar pra baixo.

    • @raphael.portela
      @raphael.portela Рік тому

      @@pgdinamica obrigado Hall, voce usou o cormen na sua graduação? acha um bom livro pra pessoa seguir por conta propria como eu to fazendo? to um pouco devagar mas sinto que to aprendendo de fato

  • @Julio-nf4nz
    @Julio-nf4nz Рік тому

    Professor eu tenho uma duvida. Eu estou tentando implementar o algoritmo do Tim Sort e consegui, porem quando eu ponho um Array de 10.000 números aleatórios dá um erro na parte do Merge, até agora não sei como resolver.
    import random
    def insertion_sort(array, left=0, right=None):
    if right is None:
    right = len(array) - 1
    for i in range(left + 1, right + 1):
    key_item = array[i]
    j = i - 1
    while j >= left and array[j] > key_item:
    array[j + 1] = array[j]
    j -= 1
    array[j + 1] = key_item
    return array
    def merge(left, right):
    if not left:
    return right
    if not right:
    return left
    if left[0] < right[0]:
    return [left[0]] + merge(left[1:], right)
    return [right[0]] + merge(left, right[1:])
    def tim_sort(array):
    min_run = 32
    n = len(array)
    for i in range(0, n, min_run):
    insertion_sort(array, i, min((i + min_run - 1), n - 1))
    size = min_run
    while size < n:
    for start in range(0, n, size * 2):
    midpoint = start + size - 1
    end = min((start + size * 2 - 1), (n-1))
    merged_array = merge(
    left=array[start:midpoint + 1],
    right=array[midpoint + 1:end + 1]
    )
    array[start:start + len(merged_array)] = merged_array
    size *= 2
    return array
    # Gerar os numeros para um array
    arr = [random.randint(0, 10000) for i in range(10000)]
    # Imprimir o array original
    print("Array original:")
    print(arr)
    # Ordenar o array usando o algoritmo Tim Sort
    arr = tim_sort(arr)
    # Imprimir o array ordenado
    print("
    Array ordenado:")
    print(arr)

  • @luizmartins7852
    @luizmartins7852 4 роки тому

    Como seria o merge pra ordenar um vetor de strings?

  • @PedroLucas-xu1gi
    @PedroLucas-xu1gi 2 роки тому +1

    no meu codigo a lista é retornada vazia

  • @vitorrodrigues2969
    @vitorrodrigues2969 2 роки тому

    me veio um pensamento na cabeça, se houver uma lista muito grande para o merge sort dividir em listas de 1 elemento em cada variavel, pode ocorrer o erro de estouro de pilha?

    • @pgdinamica
      @pgdinamica  2 роки тому

      Sim, muito bem observado! Neste caso, seria melhor usar um algoritmo com versão iterativa ou, ainda, fazer uma ordenação “off-line” usando a memória secundária.

  • @assisvt
    @assisvt Рік тому

    A lógica do Merge Sort é a mesma em qualquer linguagem? Python, java etc?

    • @pgdinamica
      @pgdinamica  Рік тому +1

      Sim. É a lógica que caracteriza o algoritmo, não o código. Merge Sort foi inventado muito antes de Java, Python, JavaScript e várias outras linguagens que são populares hoje em dia.

  • @TiagoSantos-ed6zk
    @TiagoSantos-ed6zk 4 роки тому

    Eu fiz exatamente igual ao código do vídeo, mas quando coloco para ordenar só retorna None. O que será?

    • @pgdinamica
      @pgdinamica  4 роки тому

      Oi, amigo, repara que a função não tem "return", ela ordena a lista passada como entrada. Após chamar a função, exiba a lista e verifique se ela está ordenada 🤙🏾

    • @TiagoSantos-ed6zk
      @TiagoSantos-ed6zk 4 роки тому

      @@pgdinamica Ah, tá! Agora entendi. Muito obrigado. Parabéns pelo canal. Os conteúdos são incríveis. 🥰

    • @pgdinamica
      @pgdinamica  4 роки тому

      🙌🏾

  •  4 роки тому

    Fui assistindo e copiando o código, mas aí quando chegou na parte das listas e do import eu me perdi, pois estou fazendo no Google Colab. Isso está em outro vídeo?

    • @pgdinamica
      @pgdinamica  4 роки тому

      Tá distribuído em vários vídeos, mas o código completo fica aqui: github.com/python-cafe/algorithms/tree/master/sorting

  • @denicarvalho17
    @denicarvalho17 3 роки тому

    Olá vc teria essa implementação em C?

    • @pgdinamica
      @pgdinamica  3 роки тому

      Olá, qual dificuldade você está enfrentando para implementar em C a partir da explicação? Você entendeu a ideia do algoritmo? Se você só copiar o código, não vai aprender.

    • @valdenicedecarvalholopes3594
      @valdenicedecarvalholopes3594 3 роки тому

      @@pgdinamica olá entendi a idéia sim , mas não sei python, é um pouco diferente, e fiquei com muita dificuldade em implementar em C, seria ótima se houvesse uma explicação passo a passo como esse do video, será que ainda vai rolar?

  • @maissss1888
    @maissss1888 3 роки тому

    Onde encontro o código em C?

    • @pgdinamica
      @pgdinamica  3 роки тому

      O código é *bem fácil* de encontrar na internet, mas você vai aprender muito mais se implementar por conta própria.