桶排序采用队列作为存储结构,因此是一种稳定性算法。
桶排序的时间复杂度为o(n+m),空间复杂度为o(m),用来存储m个静态队列表示的桶。
#include
using namespace std;
struct node
{
int key;
int next;
};
struct queuenode
{
int front;
int rear;
};
void distribute(node r[],queuenode q[])
{
int i=0;
while(r[i].next!=-1)
{
int k=r[i].key;
if(q[k].front==-1) q[k].front=i;
else r[q[k].rear].next=i;
q[k].rear=i;
i=r[i].next;
}
}
void collect(node r[],queuenode q[],int min,int max)
{
int k=min-1;
while(q[k].front!=-1)
k++;
int last=q[k].rear;
while(k
{
k++;
if(q[k].front!=-1)
{
r[last].next=q[k].front;
last=q[k].rear;
}
}
r[last].next=-1;
}
void s_busort(node r[],queuenode q[],int a[], int n,int min ,int max)
{
for(int i=0;i
{
r[i].key=a[i];
r[i].next=i+1;
}
r[n-1].next=-1;
for(int j=min-1;j
q[j].front=q[j].rear=-1;
distribute(r,q);
collect(r,q,min,max);
}
void s_printf(node r[],int length,int min)
{
int i=0;
while(i
{
if(r[i].key==min)
{
cout<<r[i].key<<" ";
break;
}
i++;
}
while(i!=-1)
{
i=r[i].next;
cout<<r[i].key<<" ";
}
cout<<endl;
}
int main()
{
int a[10]={24,62,32,20,62,23,54,96,24,34};
const int length=10;
const int min=20;
const int max=96;
node r[length];
queuenode q[max];
s_busort(r,q,a,length,min,max);
s_printf(r,length,min);
return 0;
}
c++ 桶排序算法
最新推荐文章于 2024-04-22 21:49:06 发布