Jump to content

Quick Sort c++


bf0269714@gmail.com

Recommended Posts

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 to comment
Share on other sites

  • 3 weeks later...

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 to comment
Share on other sites

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...