APP下载

最快的内部排序法—桶排序法

2018-12-21童小明

赢未来 2018年14期
关键词:排序分配

童小明

摘要:排序方法非常重要,但是種类很多,现在最快的内部排序方法是快速排序,但是本人仔细研究了桶式排序法,理论上它应该比快速排序法还要快,但实际应用中却比快速排序慢一些,尤其是当数据量非常大时。于是本人改进了桶式排序法,并命名为桶排序法,非常简单高效,时间复杂度也很低,是最快的内部排序法。

关键词:内部排序时间复杂度空间复杂度快速排序桶排序

0. 引言

排序方法非常重要,但是种类很多,现在最快的内部排序方法是快速排序,但是本人仔细研究了桶式排序法,理论上它应该比快速排序法还要快,但实际应用中却比快速排序慢一些,尤其是当数据量非常大时。

于是本人改进了桶式排序法,并命名为桶排序法,非常简单高效,时间复杂度也很低,是最快的内部排序法。

中学高级教师,软件编程和算法设计

1.桶式排序法

桶式排序过程示例。

问题(1)的解决:桶式排序法采用链接存储,设置m个链队列作为桶的存储结构。

采用静态链表作为链队列和待排序记录序列的存储结构。

structNode{

intkey;//键值

intnext;//下一个键值在数组中的下标

};

structQueueNode{//定义静态链队列存储桶

intfront;//队头指针

intrear;//队尾指针

}

问题(2)的解决:分配操作即是将记录插入到相应的队列中,入队在静态链表上实现,

并修改相应队列的队头指针和队尾指针。

//分配算法

//first为静态链表的头指针,从下标0开始存放待排序序列

voidDistribute(Noder[],intn,QueueNodeq[],intm,intfirst)

{

i=first;

while(r[i].next!=-1)//依次分配每一个待排序记录

{

k=r[i].key;

if(q[k].front==-1)q[k].front=i;//处理队列为空的情况

elser[q[k].rear].next=i;//在静态链表中实现插入在队列尾部

登录APP查看全文

猜你喜欢

排序分配
排排序
基于可行方向法的水下机器人推力分配
恐怖排序
应答器THR和TFFR分配及SIL等级探讨
遗产的分配
一种分配十分不均的财富
节日排序
绩效考核分配的实践与思考
刻舟求剑
俄罗斯的分配状况