Ordenar datos enteros del archivo y calcular el tiempo de ejecución

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:

  1. Abra el archivo usando fopen().
  2. Escanee el archivo y cópielo en la array usando fscanf().
  3. Aplique cualquier algoritmo de clasificación que desee.
  4. 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:

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *