How to write a C Program to QuickVSInsertion Sorting C Programming Language ?
Solution:
#include <stdio.h>
#include <stdlib.h> //usado para a fx system("cls"); que limpa a tela
#include <windows.h>
#include <conio.h> //no caso se eu precisar de pausar a tela
typedef long tipoChave;
typedef struct TipoItem {
tipoChave chave; //Cria uma variavel long que sera a chave
}TipoItem;
void Quicksort(TipoItem* A, int esq, int dir){ //define a função principal do quicksort, que sera chamado recursivamente
int pivoPos; //cria a variavel que sera o pivo
if (esq < dir){ //Condição de parada
pivoPos = Particao(A, esq, dir); //Cria 2 partições e insere pivô na posição correta
Quicksort(A, esq, pivoPos - 1); //1ª partição
Quicksort(A, pivoPos + 1, dir); //2ª partição
}
}
int Particao(TipoItem* A, int esq, int dir){
int i, j; //cria uma variavel simples que sera usada como contador
tipoChave pivo; //cria uma variavel para o pivo
TipoItem temp; //cria uma variavel temporaria
pivo = A[dir].chave; //Aponta para o último elemento
i = esq - 1; //2ª partição está vazia
for (j = esq; j < dir; j++) { //Percorre o pedaço inteiro
if (A[j].chave <= pivo){ //verifica se e da 1ª partição
i++; //incrementa o i que estava na posicao -1
temp = A[i]; //movimentaçao de dados
A[i] = A[j]; //movimentaçao de dados
A[j] = temp; //movimentaçao de dados
}
}
temp = A[i+1]; //Troca o pivô com o 1 da 2 partição
A[i+1] = A[dir]; //movimentacao de dados
A[dir] = temp; //movimentacao de dados
return i + 1; //Retorna a posição do pivô
}
void ordenaCase1(TipoItem* arquivoUm){
int i, inicio, final;
int tmili;
unsigned long long int comp, mover;
FILE *arq;
arq = fopen("Vetor-6000-Aleatorio.txt","r"); //abre o arquivo txt que vai ser ordenado
printf("Iniciando QuickSort\n\nAguarde a ordenacao...\n\n"); //feedback para o usuario
// Carrega o arquivo para a memória
for (i = 1; i <= 6000; i++){
fscanf(arq, "%d", &arquivoUm[i-1].chave);
}
inicio = GetTickCount(); //captura o tempo em que a ordenaçao comeca
Quicksort(arquivoUm, 0, 5999); //Chama a funçao do QuickSort
final = GetTickCount(); //captura o tempo final, depois de tudo esta ordenado
tmili = final - inicio; //efetua a conversao para o tempo ser exibido em segundos
printf("Tempo decorrido em mili-segundos: %d\n\n", tmili); //utilizando o tempo em milisegundo, pois e muito rapido
arq = fopen("Vetor-6000-Aleatorio-Saida.txt","w"); //cria o arquivo ordenado em txt
for(i = 0; i < 6000; i++){
fprintf(arq, "%d\n", arquivoUm[i].chave); //insere os elementos ordenados no arquivo criado anteriormente
}
fflush(arq); //limpa da memoria o arquivo
fclose(arq); //fecha o arquivo txt
}
void ordenaCase2(TipoItem* arquivoUm){
int i, inicio, final;
int tmili;
unsigned long long int comp, mover;
FILE *arq;
arq = fopen("Vetor-6000-Crescente.txt","r"); //abre o arquivo txt que vai ser ordenado
printf("Iniciando QuickSort\n\nAguarde a ordenacao...\n\n"); //feedback para o usuario
// Carrega o arquivo para a memória
for (i = 1; i <= 6000; i++){
fscanf(arq, "%d", &arquivoUm[i-1].chave);
}
inicio = GetTickCount(); //captura o tempo em que a ordenaçao comeca
Quicksort(arquivoUm, 0, 5999); //Chama a funçao do QuickSort
final = GetTickCount(); //captura o tempo final, depois de tudo esta ordenado
tmili = final - inicio; //efetua a conversao para o tempo ser exibido em segundos
printf("Tempo decorrido em mili-segundos: %d\n\n", tmili); //utilizando o tempo em milisegundo, pois e muito rapido
arq = fopen("Vetor-6000-Crescente-Saida.txt","w"); //cria o arquivo ordenado em txt
for(i = 0; i < 6000; i++){
fprintf(arq, "%d\n", arquivoUm[i].chave); //insere os elementos ordenados no arquivo criado anteriormente
}
fflush(arq); //limpa da memoria o arquivo
fclose(arq); //fecha o arquivo txt
}
void ordenaCase3(TipoItem* arquivoUm){
int i, inicio, final;
int tmili;
unsigned long long int comp, mover;
FILE *arq;
arq = fopen("Vetor-6000-Decrescente.txt","r"); //abre o arquivo txt que vai ser ordenado
printf("Iniciando QuickSort\n\nAguarde a ordenacao...\n\n"); //feedback para o usuario
// Carrega o arquivo para a memória
for (i = 1; i <= 6000; i++){
fscanf(arq, "%d", &arquivoUm[i-1].chave);
}
inicio = GetTickCount(); //captura o tempo em que a ordenaçao comeca
Quicksort(arquivoUm, 0, 5999); //Chama a funçao do QuickSort
final = GetTickCount(); //captura o tempo final, depois de tudo esta ordenado
tmili = final - inicio; //efetua a conversao para o tempo ser exibido em segundos
printf("Tempo decorrido em mili-segundos: %d\n\n", tmili); //utilizando o tempo em milisegundo, pois e muito rapido
arq = fopen("Vetor-6000-Decrescente-Saida.txt","w"); //cria o arquivo ordenado em txt
for(i = 0; i < 6000; i++){
fprintf(arq, "%d\n", arquivoUm[i].chave); //insere os elementos ordenados no arquivo criado anteriormente
}
fflush(arq); //limpa da memoria o arquivo
fclose(arq); //fecha o arquivo txt
}
void ordenaCase4(TipoItem* arquivoDois){
int i, inicio, final;
float tmili;
unsigned long long int comp, mover;
float tEmSegundos;
FILE *arq;
arq = fopen("Vetor-60000-Aleatorio.txt","r"); //abre o arquivo txt que vai ser ordenado
printf("Iniciando QuickSort\n\nAguarde a ordenacao...\n\n"); //feedback para o usuario
// Carrega o arquivo para a memória
for (i = 1; i <= 60000; i++){
fscanf(arq, "%d", &arquivoDois[i-1].chave);
}
inicio = GetTickCount(); //captura o tempo em que a ordenaçao comeca
Quicksort(arquivoDois, 0, 59999); //Chama a funçao do QuickSort
final = GetTickCount(); //captura o tempo final, depois de tudo esta ordenado
tmili = (final - inicio) / 1
Learn More :
Insertion
File Handling
Sort
- Sort Three Numbers - program reads in three Integers and displays them in ascending order.
- C Program Sort Example
- C Program Shell Sort Using C Programming Language
- C Program Selection Sort Using C Programming Language
- C Program to Bubble Sort Using C Programming Language
- C Program Insertion Sort Using C Programming Language
- Heap Sort Using C Programming Language
- C Program To Sort An Array In Ascending And Descending Order
- C Program To Sort An Array Of Names In Alphabetical And Reverse Order
- C Program Sort Array By Segment
- C Program to sort an array using bubble sort
- C Program to merge and sort two arrays
- Un-sortiertes Array and Sortiertes Array
- matrix sort in C Program
- C program that receives 10 float numbers from the console and sort them in non-ascending order, and prints the result
- C Program to accept 5 names from user & store these names into an array. Sort these array elements in alphabetical order
- C Program to accept n numbers from user,store these numbers into an array & sort the number of an array
- C Program to Implement Quick Sort