您好,登录后才能下订单哦!
这篇文章主要介绍“C++如何实现桶排序”,在日常操作中,相信很多人在C++如何实现桶排序问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++如何实现桶排序”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
原理简述:按照需要排序数组的实际情况,生成一个一定长度的一维数组,用于统计需要排序数组的不同数值的重复次数,完成统计后,再按顺序重复输出该数值
确定需要排序数组的最大值和最小值
生成桶数组,并初始化
对需要排序数组进行统计,统计结果放入相应的桶中
循环输出桶,并替换原序列
#include <random> #include <ctime> // 传入空数组arr[]以及它的长度len,填入[min, max]区间内的随机整数 void getRand(int arr[], int len, int min, int max) { std::default_random_engine e; e.seed(time(0)); std::uniform_int_distribution<int> u(min,max); for (int i = 0; i < len; i++) arr[i] = u(e); }
#include <climits> void bucketSort(int arr[], int len) { // 确定最大值和最小值 int max = INT_MIN; int min = INT_MAX; for (int i = 0; i < len; i++) { if (arr[i] > max) max = arr[i]; if (arr[i] < min) min = arr[i]; } // 生成桶数组 // 设置最小的值为索引0,每个桶间隔为1 int bucketLen = max - min + 1; // 初始化桶 int bucket[bucketLen]; for (int i = 0; i < bucketLen; i++) bucket[i] = 0; // 放入桶中 int index = 0; for (int i = 0; i < len; i++) { index = arr[i] - min; bucket[index] += 1; } // 替换原序列 int start = 0; for (int i = 0; i < bucketLen; i++) { for (int j = start; j < start + bucket[i]; j++) { arr[j] = min + i; } start += bucket[i]; } }
#include <iostream> #include <random> #include <ctime> #include <climits> // 一些参数 const int MAX = 30; const int LEN = 64; void bucketSort(int arr[], int len); void getRand(int arr[], int len, int min, int max); int main() { int arr[LEN] = {0}; // 产生随机值 getRand(arr,LEN,0,MAX); // 打印随机值 std::cout << "Before sorted:" << std::endl; for (int i : arr) { std::cout << i << " "; } std::cout << "" << std::endl; // 排序 bucketSort(arr,LEN); // 打印输出值 std::cout << "After sorted:" << std::endl; for (int i : arr) { std::cout << i << " "; } } void getRand(int arr[], int len, int min, int max) { std::default_random_engine e; e.seed(time(0)); std::uniform_int_distribution<int> u(min,max); for (int i = 0; i < len; i++) arr[i] = u(e); } void bucketSort(int arr[], int len) { // 确定最大值和最小值 int max = INT_MIN; int min = INT_MAX; for (int i = 0; i < len; i++) { if (arr[i] > max) max = arr[i]; if (arr[i] < min) min = arr[i]; } // 生成桶数组 // 设置最小的值为索引0,每个桶间隔为1 int bucketLen = max - min + 1; // 初始化桶 int bucket[bucketLen]; for (int i = 0; i < bucketLen; i++) bucket[i] = 0; // 放入桶中 int index = 0; for (int i = 0; i < len; i++) { index = arr[i] - min; bucket[index] += 1; } // 替换原序列 int start = 0; for (int i = 0; i < bucketLen; i++) { for (int j = start; j < start + bucket[i]; j++) { arr[j] = min + i; } start += bucket[i]; } }
结果
分析算法步骤:
确定需要排序数组的最大值和最小值 - 循环len次
生成桶数组,并初始化 - 循环bucketLen次
对需要排序数组进行统计,统计结果放入相应的桶中 - 循环len次
循环输出桶,并替换原序列 - 循环bucketLen+len次
到此,关于“C++如何实现桶排序”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。