#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void swap(unsigned *a, unsigned *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
int partition(unsigned arr[], int low, int high)
{
    int pivot = arr[high];
    int i = low - 1;
    for (int j = low; j < high; j++)
    {
        if (arr[j] > pivot)
        {
            i++;
            swap(&arr[i], &arr[j]);
        }
    }
    swap(&arr[i + 1], &arr[high]);
    return i + 1;
}
void quickSort(unsigned arr[], int low, int high)
{
    if (low < high)
    {
        int pi = partition(arr, low, high);
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

int main()
{
    int size = 1024;
    unsigned* arr = (unsigned *)malloc(size * sizeof(unsigned));
    FILE *file = fopen("（输入文件路径）check_example.coe", "r");
    if (file == NULL){
        printf("输入文件打开失败!\n");
        return 1;
    }

    // 跳过前两行
    char line[256]; // 用于存储每一行
    for (int i = 0; i < 2; i++) {
        if (fgets(line, sizeof(line), file) == NULL) {
            printf("文件中没有足够的行。\n");
            fclose(file);
            return 1;
        }
    }
    //读取16进制数据
    for (int i = 0; i < size-1; i++){
        fscanf(file, "%x,", &arr[i]);
    }
    fscanf(file, "%x;", &arr[size-1]);  //最后一个数据后为分号
    fclose(file);

    quickSort(arr, 0, size - 1);
    file = fopen("（输出文件路径）check_example_out.txt", "w");
    if (file == NULL)
    {
        printf("输出文件打开失败!\n");
        return 1;
    }
    for (int i = 0; i < size; i++)
    {
        fprintf(file, "%03x: %08x\n", i, arr[i]);
    }
    fclose(file);
    free(arr);

    return 0;
}