常见排序算法——桶排序(箱子排序)bucket Sort
2017-05-08 22:53
316 查看
桶排序是一个经典的排序算法,特点是速度快,算法复杂度为O(n),且是稳排,当然也是最耗空间的一种算法。
例如:
1)排序一组数[7,3,19,11,6,8,1,15]
最大数是19,那首先创建20个空桶,接着就是把这些数依次放进对应的桶中;
2)有重复的元素,如[7,3,9,11,6,3,7,14],这时候应该保证每个桶能放入多个元素,即最终保证排序稳定性,所以我选择用链表来存储每个桶中的元素,没有元素则为空链表。
以下代码使用了我学习时写的单向链表chain.h,类似于STL中forward_list。
例如:
1)排序一组数[7,3,19,11,6,8,1,15]
最大数是19,那首先创建20个空桶,接着就是把这些数依次放进对应的桶中;
2)有重复的元素,如[7,3,9,11,6,3,7,14],这时候应该保证每个桶能放入多个元素,即最终保证排序稳定性,所以我选择用链表来存储每个桶中的元素,没有元素则为空链表。
以下代码使用了我学习时写的单向链表chain.h,类似于STL中forward_list。
/************************************** *函数名称:bucketSort *参数说明:theChain 一个保存待排序的所有元素的单向链表 range 数组中的最大数 * 类说明:chain.h是个单向链表,前面学习线性表的时候创建 包含size(),empty(),get(index),erase(index),insert(index,element) 等成员函数 ***************************************/ #include<iostream> #include"chain.h" using namespace std; void bucketSort(chain<int> &theChain, int range) { //初始化桶 chain<int> *bucket = new chain<int>[range + 1]; int numberOfElements = theChain.size(); //从链表中一次取下元素,分别插入到对应的桶中 for (int i = 0; i < numberOfElements; ++i) { int x = theChain.get(0); theChain.erase(0); bucket[x].insert(0, x); } //依次从每个桶中取出元素插入到链表中 for(int j = range; j >= 0; --j) while (!bucket[j].empty()) { int y = bucket[j].get(0); bucket[j].erase(0); theChain.insert(0, y); } delete[] bucket; } int main() { chain<int> c; for (int i = 0; i < 10; ++i) c.insert(0, i + 1); cout << c << endl; //10,9,8,7,6,5,4,3,2,1 bucketSort(c, 10); //1,2,3,4,5,6,7,8,9,10 cout << c << endl; return 0; }
相关文章推荐
- 常见排序算法(四)(基数排序、桶排序)
- 各种常见的排序,冒泡排序,选择排序,插入排序,希尔排序,堆排序,快速排序,基数排序,桶排序
- 排序算法之线性排序(计数排序和桶排序)--Java语言
- 知识点8:常见的排序算法–选择排序
- 常见排序算法(交换排序-曾经的笔记)
- 排序算法总结之桶排序 Bucket Sort
- 常见的几种排序算法一-选择排序,插入排序
- 常见排序算法(选择排序-曾经的笔记)
- 算法初级02——荷兰国旗问题、随机快速排序、堆排序、桶排序、相邻两数的最大差值问题、工程中的综合排序算法
- 常见的五类排序算法图解和实现(插入类:直接插入排序,折半插入排序,希尔排序)
- 排序稳定性的意义 常见排序算法的稳定性分析
- 常见的五类排序算法图解和实现(选择类:简单选择排序,锦标赛排序,树形选择排序,堆排序)
- C++各种常见排序算法 冒泡排序,插入排序,快排序,选择排序,希尔排序
- Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
- 常见的排序算法(二) 选择排序
- 非比较排序算法———桶排序(箱子排序)
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- 常见排序算法:插入排序 <整理>
- 几种常见的排序算法,选择排序,冒泡排序,希尔排序,堆排序,快速排序,归并排序,基数排序的比较
- 常见的排序算法示例(1)-冒泡排序、快速排序