Requisito previo: Clasificación de selección
En este artículo, vamos a aplicar el algoritmo de ordenación por selección, en el que la fuente de entrada es UN ARCHIVO QUE CONTIENE 10000 ENTEROS y la salida será el tiempo total que se tarda en ordenar.
Funciones importantes a utilizar:
- rand(): Se utiliza para generar números aleatorios.
- fopen(): Se utiliza para abrir un archivo.
- fscanf(): se utiliza para escanear datos del archivo.
- clock(): devuelve el número de ciclo de reloj
Programa para generar numero aleatorio en un archivo “random.txt”
// C program to generate random numbers #include <stdio.h> #include <stdlib.h> // Driver program int main(void) { // This program will create same sequence of // random numbers on every program run FILE* fptr; // creating a file "random.txt" in "write" mode fptr = fopen("random.txt", "w"); int i; if (fptr == NULL) { printf("ERROR"); exit(1); } for (i = 0; i < 10000; i++) { // to generate number less than 100000 int val = rand() % 100000; // storing data to file fprintf(fptr, "%d ", val); } // closing the file fclose(fptr); printf("numbers generated successfully !! "); return 0; }
- clock_t o Clock ticks son unidades de tiempo de una longitud constante pero específica del sistema, como las que devuelve la función clock.
Algoritmo para este programa:
- Abra el archivo usando fopen().
- Escanee el archivo y cópielo en la array usando fscanf().
- Aplique cualquier algoritmo de clasificación que desee.
- Imprimir a la consola.
A continuación se muestra la implementación del algoritmo anterior.
#include <stdio.h> #include <time.h> int main() { // data type for calculating time clock_t starttime, endtime; // variable for calculating total time of execution double totaltime; int i = 0, j, n = 0, min, index; // declaring array to store data from file int arr[100000]; // declaring file pointer FILE* fptr; // opening the integer file. fptr = fopen("random.txt", "r"); // scanning integer from file to array while (fscanf(fptr, "%d", &arr[i]) == 1) { // for counting the number of elements n++; // for incrementing the array index i++; } // logic for selection sort.... // starts here... // calculating clock when sorting starts.. starttime = clock(); printf("start time : %f\n", (float)starttime); for (i = 0; i < n - 1; i++) { min = arr[i]; for (j = i + 1; j < n; j++) { if (arr[j] < min) { min = arr[j]; index = j; } } // swapping the smallest number with // the current arr[i]th value int temp = arr[i]; arr[i] = min; arr[index] = temp; } // selection sort logic ends here // calculating clock when sorting ends endtime = clock(); printf("%f\n", (float)endtime); totaltime = ((double)(endtime - starttime)) / CLOCKS_PER_SEC; // printing the sorted array... for (i = 0; i < n; i++) printf("%d ", arr[i]); printf("\n\nendtime : %f\n", (float)endtime); printf("\n\ntotal time of execution = %f", totaltime); return 0; }
Referencias:
- https://www.geeksforgeeks.org/selection-sort/
- https://www.geeksforgeeks.org/how-to-measure-time-taken-by-a-program-in-c/
- https://www.geeksforgeeks.org/basics-file-handling-c/
Publicación traducida automáticamente
Artículo escrito por Rohit_ranjan y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA