bf0269714@gmail.com Posted February 3, 2023 at 11:53 PM Share Posted February 3, 2023 at 11:53 PM 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 Link to comment Share on other sites More sharing options...
Devair Posted February 23, 2023 at 01:03 AM Share Posted February 23, 2023 at 01:03 AM 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 Link to comment Share on other sites More sharing options...
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.