#include<iostream>
#include<list>
using namespace std;
void ShowArray(double A[],int n)
{
cout << "result is :" << endl;
for (int i = 0; i < n ; i++)
cout << A[i] << " ";
cout << endl;
}
void BucketSort(double A[],int n)
{
//P112 , 默认输入范围[0,1) ,对于大数很简单,可以把其除以10的几倍啊哈哈
//桶排序关键是针对分布均匀的n个数,所以建n个桶,这样高效,每个一个完成就是O(n)了
//这是用STL做的,边查边做的,居然success了
list<double> B[n]; //定义n个链表
for(int i = 0; i < n ; i++)
B[(int)(n * A[i])].push_back(A[i]); //增加一个元素到链表后面
for(int i = 0; i < n; i++)
B[i].sort(); //默认升序
int j =0;
int m = 0;
while (j < n && m < n)
{
while(0 != B[m].size())
{
A[j++] = B[m].front(); //返回第一个元素, ++那样写,秀一把
B[m].pop_front(); //删除第一个元素
}
m++;
}
}
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);
ShowArray(A,10);
}
#include<list>
using namespace std;
void ShowArray(double A[],int n)
{
cout << "result is :" << endl;
for (int i = 0; i < n ; i++)
cout << A[i] << " ";
cout << endl;
}
void BucketSort(double A[],int n)
{
//P112 , 默认输入范围[0,1) ,对于大数很简单,可以把其除以10的几倍啊哈哈
//桶排序关键是针对分布均匀的n个数,所以建n个桶,这样高效,每个一个完成就是O(n)了
//这是用STL做的,边查边做的,居然success了
list<double> B[n]; //定义n个链表
for(int i = 0; i < n ; i++)
B[(int)(n * A[i])].push_back(A[i]); //增加一个元素到链表后面
for(int i = 0; i < n; i++)
B[i].sort(); //默认升序
int j =0;
int m = 0;
while (j < n && m < n)
{
while(0 != B[m].size())
{
A[j++] = B[m].front(); //返回第一个元素, ++那样写,秀一把
B[m].pop_front(); //删除第一个元素
}
m++;
}
}
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);
ShowArray(A,10);
}