void Quick(int* data, int size){ int pivot = data[0]; int left = 0; int right = size; if(size < 2) return; while ( 1 ) { while ( data[++left] < pivot ) ; // blank while ( data[--right] > pivot ) ; // blank if ( left < right ){ int temp = data[left]; data[left] = data[right]; data[right] = temp; }else break; } int tmp = data[0]; data[0] = data[right]; data[right] = tmp; Quick(data, right); Quick(data+right+1, size-right-1); }
/* QuickSort, ordenar vetor*/ void Quick(int vet[FIM], int inicio, int fim){ int pivo, aux, i, j, meio; i = inicio; j = fim; meio = (int) ((i + j) / 2); pivo = vet[meio]; do{ while (vet[i] < pivo) i = i + 1; while (vet[j] > pivo) j = j - 1; if(i <= j){ aux = vet[i]; vet[i] = vet[j]; vet[j] = aux; i = i + 1; j = j - 1; } }while(j > i); if(inicio < j) Quick(vet, inicio, j); if(i < fim) Quick(vet, i, fim); }
int main(){ int n = 0; static int data[100000]; scanf("%d", &n); while(n-->0){ int count = 0; scanf("%d", &count); for(int i=0; i<count; i++){ scanf("%d", &data[i]); } Quick(data, count); for ( int i = 0; i < count; i++ ) printf("%d ", data[i]); printf("\n"); } return 0; }
int main(){ int vetor[10] = {7, 9, 4, 3, 6, 1, 18, 2, 10, 5}; int i; printf("Vetor desordenado:\n"); for(i = 0; i < 10; i++){ printf("%d ", vetor[i]); } printf("\n"); Quick(vetor, 0, 9); printf("Vetor ordenado:\n"); for(i = 0; i < 10; i++){ printf("%d ", vetor[i]); } printf("\n"); }
int main(){ setlocale(LC_ALL, "Portuguese"); int vet[FIM]; //Inserir dados no vetor for (int i=0;i<FIM;++i){ printf("Insira um numero: "); scanf("%d", &vet[i]); } //Ordena o vetor Quick(vet, INI, FIM - 1); //Mostra vetor Ordenado printf("\n\nVetor Ordenado: \n"); for(int i=0;i<FIM;++i){ printf("%d ", vet[i]); } return 0; }
main(){ //declaração de variáveis int nPos=0, nAux=0; int nInd=0, nAtual=0; int nTroca=0, nChave=0; //Quantidade de casas do vetor while((nPos<=0)||(nPos>100)){ printf("\nQuantos numeros tera o vetor? "); scanf("%d",&nPos); } //criando o vetor int nVetor[nPos], nOrig[nPos], nOpc=-1; //preenchendo os dados do vetor for(nAux=0;nAux<=nPos-1;nAux++){ printf("\nInsira o numero %d: ",nAux+1); scanf("%d",&nVetor[nAux]); nOrig[nAux]=nVetor[nAux]; } limpa_tela; //limpando a tela while((nOpc<=0)||(nOpc>=3)){ printf("\n > Menu:"); printf("\n 1. Troca | Bubble Sort"); printf("\n 2. Referência | QuickSort"); printf("\n > Resposta: "); scanf("%d",&nOpc); } printf("\nOrdenando:\n"); int i, j, t, m; if (nOpc==1){ //bubble - troca nTroca = nPos - 1 ; for(nInd = 0; nInd < nPos; nInd++) { for(nAux=0;nAux<=nPos-1;nAux++){ printf("[%d]",nVetor[nAux]); } for(nAtual = 0; nAtual < nTroca; nAtual++) { if(nVetor[nAtual] > nVetor[nAtual+1]) { nAux = nVetor[nAtual]; nVetor[nAtual] = nVetor[nAtual+1]; nVetor[nAtual+1]=nAux; } } nTroca--; printf("\n"); } }else{ if(nOpc==2){ Quick(nVetor,0,nPos); } } //Resultado - Vetor Original printf("\nOriginal: "); for(nAux=0;nAux<=nPos-1;nAux++){ printf("[%d]",nOrig[nAux]); } //Resultado - Vetor Ordenado printf("\nOrdenada: "); for(nAux=0;nAux<=nPos-1;nAux++){ printf("[%d]",nVetor[nAux]); } //limpando os dados e esperando o usuario apertar -Enter- getchar(); printf("\n\nPressione -Enter- para finalizar!\n\n"); getchar(); }
int main(){ setlocale(LC_ALL, "Portuguese"); int vet[FIM], x, ini, meio, m1, m2, fim; //Inserir dados no vetor for (int i=0;i<FIM;++i){ printf("Insira um numero: "); scanf("%d", &vet[i]); } //Ordena o vetor Quick(vet, INI, FIM - 1); //Mostra vetor Ordenado printf("\n\nVetor Ordenado: \n"); for(int i=0;i<FIM;++i){ printf("%d ", vet[i]); } //Solicita ao usuário para inserir um número printf("\n\nInforme um numero para achar a posicao: "); scanf("%d", &x); ini = 0; fim = FIM-1; //Inicio do método de busca binária do{ if(ini > fim){ printf("Número não encontrado."); break; } meio = (ini + fim)/2; m1 = (ini + meio)/2; m2 = (meio + fim)/2; if(x == vet[meio] || x == vet[m1] || x == vet[m2]){ if(x == vet[meio]){ printf("Encontrado na posição: %d", meio + 1); break; }else if(x == vet[m1]){ printf("Encontrado na posição: %d", m1 + 1); break; }else{ printf("Encontrado na posição: %d", m2 + 1); break; } } else if(x < vet[m1]){ fim = m1-1; }else if(x > vet[m1] && x < vet[meio]){ ini = m1+1; fim = meio-1; }else if(x>vet[meio] && x < vet[m2]){ ini = meio+1; fim = m2-1; }else if(x > vet[m2]){ ini = m2+1; } }while(1); return 0; }