从0开始学算法--排序(1.8桶排序)
算法理解: 桶排序是对计数排序的一种优化,在计数排序中x应该放在计数数组下表为x的位置上,这样如果重复数字较少,计数数组每个位置的利用率就非常小。 桶排序是将一系列大小近似的数字放在一个位置(每个桶维护一条有序的链表),这样提高每个位置的利用率,以提高效率. 以A【】={1,21,23,41,49}为例 假设每个桶里有10中元素,那么桶排序的结构如下图所示。 #include <algorithm> #include <iostream> #include <cstring> #include <vector> #include <cstdio> #include <cmath> #include <queue> using namespace std; const int maxn=1e5+10; typedef struct node{ int key; struct node* next; }KeyNode; void bucket_sort(int keys[],int size,int bucket_size){ KeyNode **bucket_table=(KeyNode**)malloc(bucket_size*sizeof(KeyNode*)); for(int i=0;i<bucket_size;i++){ //初始化桶 bucket_table[i]=