#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *data;
size_t size;
size_t capacity;
} Array;
Array ArrayInit() {
Array array;
array.size = 0;
array.capacity = 10;
array.data = (int *)malloc(sizeof(int) * array.capacity);
if (array.data == NULL) {
perror("init fail: ");
free(array.data);
array.data = NULL;
}
return array;
}
int ArrayAppend(Array *array, int value) {
if (array->capacity >= array->size) {
array->capacity *= 2;
}
array->data = (int *)realloc(array->data, array->capacity);
if (array->data == NULL) {
perror("append fail: ");
free(array->data);
array->data = NULL;
return 1;
}
array->data[array->size] = value;
array->size++;
return 0;
}
int ArraySort(Array *array) {
for (size_t i = 0; i < array->size - 1; i++) {
for (size_t j = 0; j < array->size - i - 1; j++) {
if (array->data[j] < array->data[j + 1]) {
int tmp = array->data[j];
array->data[j] = array->data[j + 1];
array->data[j + 1] = tmp;
}
}
}
return 0;
}
void ArrayPrint(Array *array) {
for (size_t i = 0; i < array->size; i++) {
printf("%c", array->data[i]);
}
printf("\n");
}
int main() {
Array arr = ArrayInit();
// ArrayAppend(&arr, 12);
// ArrayAppend(&arr, 13);
// ArrayAppend(&arr, 3);
ArrayAppend(&arr, 'H');
ArrayAppend(&arr, 'e');
ArrayAppend(&arr, 'l');
ArrayAppend(&arr, 'l');
ArrayAppend(&arr, 'o');
ArrayPrint(&arr);
ArraySort(&arr);
ArrayPrint(&arr);
return 0;
}