C++基数排序之队列实现

 一直以来对编程语言方面有特别的喜好,虽然咱是一个小白!这么多年过去了,涉及过不少编程语言,多是浅尝则止,学到皮毛而已。想到非自己的本行,知识水平有限,深入不到哪里去,曾经很长一段时间暂时忘却了它。不料最近又突发兴致,慢慢又捡起以前所学的皮毛,开始学习C++了……呵呵,没办法,喜欢嘛!总感觉自己这辈子走错了行一样……唉,牢骚!就当防止老年痴呆吧!

哈哈~离题万里了 !最近学到有关数据结构的,兴趣挺浓的。边学边试着写代码实现(当然是站在巨人的肩膀之上的!嘻嘻!),以加深自己的理解。还别说,不写则已,一写才发现很多东西都还没搞清楚。也正是因为一写,才发现其中的奥妙!

比如:基数排序吧!之前看了很多其它排序的方法,什么冒泡法呀,交换法呀,选择法呀,插入法呀等等,还有好多高级的排序法。基数排序跟它们比较,感觉完全不一样。其它的都涉及到数据大小的比较,而这个排序完全不管这些,直接机械地但有规律地根据数据的每一位数字,把它排到相应的0-9为脚标的”桶“(我这里是用的队列,其实一个意思吧)里面,再按照0-9的顺序回收到原数组中,完成一次排序。然后根据数据的第二位数字、第三位数字……进行相同的排序、回收,然后结果就这样连大小都没有比(实际上变成了另外一种”比较“:有序存放数据!)结果就出来了!!!效率之高,令小白的我也十分惊叹&#x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++中,我们可以利用队列实现链式基数排序。这里介绍一个利用STL中的队列实现链式基数排序的方法。 ```cpp #include <iostream> #include <queue> #include <cmath> using namespace std; // 获取一个数字的某一位数字 int getDigit(int number, int digit) { return (number / static_cast<int>(pow(10, digit - 1))) % 10; } // 链式基数排序 void radixSort(int arr[], int size, int digit) { // 创建 10 个桶 queue<int> bucket[10]; // 按照每一位数字进行排序 for (int i = 1; i <= digit; i++) { // 把数据放入桶中 for (int j = 0; j < size; j++) { int num = getDigit(arr[j], i); bucket[num].push(arr[j]); } // 把桶中的数据放回原数组中 int index = 0; for (int j = 0; j < 10; j++) { while (!bucket[j].empty()) { arr[index++] = bucket[j].front(); bucket[j].pop(); } } } } int main() { int arr[] = {170, 45, 75, 90, 802, 24, 2, 66}; int size = sizeof(arr) / sizeof(arr[0]); radixSort(arr, size, 3); for (int i = 0; i < size; i++) { cout << arr[i] << " "; } cout << endl; return 0; } ``` 在代码中,我们首先定义了一个 `getDigit` 函数,用于获取一个数字的某一位数字。然后定义了 `radixSort` 函数,用于进行链式基数排序。在函数中,我们首先创建了 10 个桶,然后按照每一位数字进行排序,具体实现方法是把数据放入相应的桶中,然后把桶中的数据放回原数组中。最后,在 `main` 函数中,我们创建了一个数组 `arr`,并调用 `radixSort` 函数进行排序。最后输出排序后的结果。 需要注意的是,这里我们只引入了队列的库,而没有引入链表等其他库,因为队列是链表的一种特殊形式,可以用来实现链式存储。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值