#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STR_LEN 100
#define MAX_STR_COUNT 1000
void bubbleSort(char arr[][MAX_STR_LEN], int n) {
for (int i = 0; i < n-1; i++)
for (int j = 0; j < n-i-1; j++)
if (strcmp(arr[j], arr[j+1]) > 0) {
// Intercambiar arr[j] y arr[j+1]
char temp[MAX_STR_LEN];
strcpy(temp, arr[j]);
strcpy(arr[j], arr[j+1]);
strcpy(arr[j+1], temp);
}
}
void shellSort(char arr[][MAX_STR_LEN], int n) {
for (int gap = n/2; gap > 0; gap /= 2) {
for (int i = gap; i < n; i++) {
char temp[MAX_STR_LEN];
strcpy(temp, arr[i]);
int j;
for (j = i; j >= gap && strcmp(arr[j - gap], temp) > 0; j -= gap)
strcpy(arr[j], arr[j - gap]);
strcpy(arr[j], temp);
}
}
}
int main() {
FILE *file = fopen("cadenas.bin", "rb");
if (!file) {
perror("No se pudo abrir el archivo");
return EXIT_FAILURE;
}
char arr[MAX_STR_COUNT][MAX_STR_LEN];
int count = 0;
// Leer cadenas del archivo
while (fread(arr[count], sizeof(char), MAX_STR_LEN, file) == MAX_STR_LEN) {
count++;
}
fclose(file);
// Ordenar usando bubble sort
bubbleSort(arr, count);
// Guardar el resultado en un nuevo archivo
file = fopen("cadenas_ordenadas_bubble.bin", "wb");
fwrite(arr, sizeof(char), count * MAX_STR_LEN, file);
fclose(file);
// Reiniciar el arreglo
file = fopen("cadenas.bin", "rb");
fread(arr, sizeof(char), count * MAX_STR_LEN, file);
fclose(file);
// Ordenar usando shell sort
shellSort(arr, count);
// Guardar el resultado en un nuevo archivo
file = fopen("cadenas_ordenadas_shell.bin", "wb");
fwrite(arr, sizeof(char), count * MAX_STR_LEN, file);
fclose(file);
return 0;
}