Jump to content

Recommended Posts

Posted

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
  • 3 weeks later...
Posted

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

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...