编辑代码

#define _CRT_SECURE_NO_WARNINGS

#include <malloc.h>
#include <stdio.h>

typedef struct ListNode {
    int              data;
    struct ListNode* next;
} LN;


void displayL(LN* L) {
    LN* p = L;                  
    while (p != NULL) {         
        printf("%d ", p->data); 
        p = p->next;            
    }
    printf("\n");
}


void displayA(int* nums, int numsSize) {
    for (int i = 0; i < numsSize; i++) {
        printf("%d ", nums[i]);
    }
    printf("\n");
}


LN* Merge(LN* head, LN* list) {
    LN* last   = head;
    last->next = list->next;
    while (last->next) {
        last = last->next;
    }
    return last;
}


void insert(LN* list, int value) {
    LN* prev = list;
    LN* curr = list->next;
    LN* node = (LN*)malloc(sizeof(LN));

    node->data = value;
    node->next = NULL;
    if (curr == NULL) {
        prev->next = node;
    } else {
        while (curr != NULL && curr->data < value) {
            prev = curr;
            curr = curr->next;
        }
        prev->next = node;
        node->next = curr;
    }
}


void BucketSort(int array[], int size, int num) {
    // 
    LN** buckets = (LN**)malloc(sizeof(LN*) * num);
    for (int i = 0; i < num; i++) {
        *(buckets + i)         = (LN*)malloc(sizeof(LN));
        (*(buckets + i))->next = NULL;
    }


    int max = array[0];
    int min = array[0];
    for (int i = 0; i < size; i++) {
        if (array[i] > max) {
            max = array[i];
        }
        if (array[i] < min) {
            min = array[i];
        }
    }
    int space = ((max - min) / num) + 1;

    for (int i = 0; i < size; i++) {
        int n = (array[i] - min) / space;
        insert(*(buckets + n), array[i]);
    }
    for (int i = 0; i < num; i++) {
        printf("第 %d 个桶数据: ", i);
        displayL((*(buckets + i))->next);
    }

 
    int index = 0;
    for (int i = 0; i < num; i++) {
        if ((*(buckets + i))->next != NULL) {
            LN* temp = (*(buckets + i))->next;
            while (temp != NULL) {
                array[index++] = temp->data;
                temp           = temp->next;
            }
        }
    }
}

int main() {
    int array[]   = {78,17,39,26,72,94,21,12,23,68};
    int size      = sizeof(array) / sizeof(int);
    int BUCKETNUM = 5;

    // 打印原始数据
    printf("%d \n", size);
    displayA(array, size);
    BucketSort(array, size, BUCKETNUM);
    displayA(array, size);

    return 0;
}