C++实现桶排序:
#include<iostream>
using namespace std;struct node
{
double data;
node* next;
};
void bucketsort(double *a,int n)
{
node *b=new node[n];
for(int i=0;i<n;i++)
{
b[i].data=0;
b[i].next=NULL;
}
for(int i=0;i<n;i++)
{
int j=(int)(a[i]*n);
node *p=new node;
p->data=a[i];
p->next=NULL;
if(NULL==b[j].next)
{
b[j].next=p;
}
else
{
node *q,*r;
q=&b[j];
r=b[j].next;
while(NULL!=r&&r->data<=a[i])
{
q=q->next;
r=r->next;
}
q->next=p;
p->next=r;
}
}
//display
for(int i=0;i<n;i++)
{
if(NULL==b[i].next)
continue;
else
{
while(NULL!=b[i].next)
{
cout<<b[i].next->data<<" ";
b[i].next=b[i].next->next;
}
}
}
cout<<endl;
//释放空间
for(int i=0;i<n;i++)
{
if(NULL==b[i].next)
continue;
else
{
while(NULL!=b[i].next)
{node *p=b[i].next;
b[i].next=p->next;
delete p;
p=NULL;
}
}
}
}
int main()
{
double a[10]={0.78,0.17,0.39,0.26,0.72,0.94,0.21,0.12,0.23,0.68};
bucketsort(a,10);
return 0;
}