您的位置:首页 > 文旅 > 旅游 > seo sem是什么_电影制作公司_交换友情链接吧_什么是互联网营销

seo sem是什么_电影制作公司_交换友情链接吧_什么是互联网营销

2024/12/23 12:14:04 来源:https://blog.csdn.net/bbppooi/article/details/144173161  浏览:    关键词:seo sem是什么_电影制作公司_交换友情链接吧_什么是互联网营销
seo sem是什么_电影制作公司_交换友情链接吧_什么是互联网营销
#include <stdio.h>
#include <stdlib.h>// 定义桶的结构
typedef struct Bucket {int* data;   // 动态数组int count;   // 当前存储的元素个数int capacity; // 桶的容量
} Bucket;// 初始化桶
void InitBucket(Bucket* bucket) {bucket->capacity = 10; // 初始容量bucket->data = (int*)malloc(bucket->capacity * sizeof(int));bucket->count = 0;
}// 向桶中添加元素
void AddToBucket(Bucket* bucket, int value) {if (bucket->count == bucket->capacity) {bucket->capacity *= 2;bucket->data = (int*)realloc(bucket->data, bucket->capacity * sizeof(int));}bucket->data[bucket->count++] = value;
}// 桶内使用插入排序
void InsertionSort(int* arr, int n) {for (int i = 1; i < n; i++) {int key = arr[i];int j = i - 1;while (j >= 0 && arr[j] > key) {arr[j + 1] = arr[j];j--;}arr[j + 1] = key;}
}// 桶排序函数
void BucketSort(int* arr, int n) {if (n <= 1) return;// 找到数组中的最大值和最小值int min = arr[0], max = arr[0];for (int i = 1; i < n; i++) {if (arr[i] < min) min = arr[i];if (arr[i] > max) max = arr[i];}int bucketCount = 10; // 默认分成10个桶int range = max - min + 1;int bucketRange = range / bucketCount + 1;// 初始化桶数组Bucket* buckets = (Bucket*)malloc(bucketCount * sizeof(Bucket));for (int i = 0; i < bucketCount; i++) {InitBucket(&buckets[i]);}// 将数据分配到桶中for (int i = 0; i < n; i++) {int bucketIndex = (arr[i] - min) / bucketRange;AddToBucket(&buckets[bucketIndex], arr[i]);}// 对每个桶中的数据排序并合并结果int index = 0;for (int i = 0; i < bucketCount; i++) {if (buckets[i].count > 0) {InsertionSort(buckets[i].data, buckets[i].count);for (int j = 0; j < buckets[i].count; j++) {arr[index++] = buckets[i].data[j];}}free(buckets[i].data);}// 释放桶数组free(buckets);
}// 测试函数
int main() {int arr[] = {42, 32, 33, 52, 37, 47, 51, 30};int n = sizeof(arr) / sizeof(arr[0]);printf("Before sorting: ");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");BucketSort(arr, n);printf("After sorting: ");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}

测试结果

详细可见排序学习整理(3)-CSDN博客 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com