#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Comparator function to sort strings as decimal numbers
int compareAsDecimal(const void* a, const void* b) {
// Convert strings to double for comparison
const char* strA = *(const char**)a;
const char* strB = *(const char**)b;
double numA = strtod(strA, NULL);
double numB = strtod(strB, NULL);
if (numA < numB) return -1;
if (numA > numB) return 1;
return 0;
}
int main() {
// Input array of strings
const char* numbers[] = {"12.3", "5.6", "789.1", "3.14", "456.0", "0", "0.01", "4.0"};
int size = sizeof(numbers) / sizeof(numbers[0]);
// Sort the array using the custom comparator
qsort(numbers, size, sizeof(char*), compareAsDecimal);
// Print the sorted array
printf("Sorted array of decimal strings:\n");
for (int i = 0; i < size; ++i) {
printf("%s ", numbers[i]);
}
return 0;
}
/*
run:
Sorted array of decimal strings:
0 0.01 3.14 4.0 5.6 12.3 456.0 789.1
*/