bf0269714@gmail.com Posted February 3, 2023 Posted February 3, 2023 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! 1 Quote
Devair Posted February 23, 2023 Posted February 23, 2023 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 Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.