Ir para conteúdo

Quick Sort c++


bf0269714@gmail.com

Posts Recomendados

Boa tarde a todos,

 

Estou tentando escrever um código de qquick sort em c++ para ordenar a seguinte lista: {10, 9, 8, 7, 6, 5, 4, 3, 2, 1}, mas ao compliar não funciona, e me retorna apenas: Process returned -1073741571 (0xC00000FD)   execution time : 1.072 s
Press any key to continue.

 

Este é o código que estou usando:

 

#include <iostream>
#include <stdlib.h>
#include <string>
#define TAM 10


using namespace std;

void imprimeVetor(int vetor[]){

int i;
cout << "\n";
for(i = 0; i < TAM; i++){
    cout << "|" << vetor[i] << "|";
    }
}

void swap(int vetor[], int pos1, int pos2){
    int temp;
    temp = vetor[pos1];
    vetor[pos1] = vetor[pos2];
    vetor[pos2] = temp;
}

int partittion(int vetor[], int menor, int maior, int pivot){

    int i = menor;
    int j = maior;
    while(i <= maior){
        if(vetor[i]> pivot){
            i++;
        }
        else{
            swap(vetor, i, j);
            i++;
            j++;
        }
    }
    return j -1;
}


void quick_sort(int vetor[], int menor, int maior){

    menor = 0;
    maior = 10;

    if(menor < maior){
        int pivot = vetor[maior];
        int pos = partittion(vetor, menor, maior, pivot);

        quick_sort(vetor, menor, pos -1);
        quick_sort(vetor, pos +1, maior);
    }

}

int main(){

    int vetor[TAM] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};

    quick_sort(vetor, 0, TAM);

    imprimeVetor(vetor);

    return 0;
}

 

Alguém consegue identificar o erro?

 

Muito obrigada!

  • Agradecer 1
Link para o comentário
Compartilhar em outros sites

  • 3 semanas depois...

bf0269714@gmail.com      esse algoritmo de ordenação de vetores , "quicksort" é bem difícil mesmo e não considero ele muito bom não , pois precisa muitas linha de código , muitos movimentos e até funções extras para resolver uma simples ordenação ,  eu prefiro o algoritmo ancoraSort , bem mais fácil e rápido ,   mas se você quer fazer esse mesmo , então servirá para aprendizado ,  e esse erro que está acontecendo nesse algoritmo é que na função "quick_sort"  você colocou a variável "maior"  e "menor"  recebendo valores fixos , e todas as vezes que chega ali o valor será o mesmo e o menor sempre será menor que o maior , nessa comparação , assim ele vai ficar repetindo isso ethernamente , ou até que haja um erro na execução do código ,  que acontece quando ele usa uma posição inesistente do votor , pois o j-1 retornado vai diminuindo a cada chamada da função "quick_sort" e aponta para tal posição .

void quick_sort(int vetor[], int menor, int maior,int cont)
{
  menor = 0;
  maior = 10;
  printf("Aqui no Quick . . . ! %d\n",cont);  /// esse cont contou 32682 vezes que repetiu a camada dessa funCAo
  if(menor < maior)
  {
     quick_sort(vetor, menor, pos -1,cont+1);  /// enviou a posiCAo menos a cada chama

 

Link para o comentário
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...