认知算法(五)

简介: 认知算法(五),一起来学习吧。

嗨,欢迎来到异星球,我是小怪同志。这篇文章主要讲认识算法,请一起学习吧。

一、桶排序

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:

1.在额外空间充足的情况下,尽量增大桶的数量
2.使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中
同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。

  1. 什么时候最快

当输入的数据可以均匀的分配到每一个桶中。

  1. 什么时候最慢

当输入的数据被分配到了同一个桶中。

二、代码实现

include

include#include<

vector>
使用命名空间std;
常量整数 BUCKET_NUM=10;

structListNode{explicitListNode(inti=0):mData(i),mNext(NULL){
}
ListNode*mNext;
intmData;
};

ListNodeinsert(ListNodehead,intval){
ListNode dummyNode;
ListNode*newNode=newListNode(val);
ListNodepre,curr;
虚拟节点。m下一个=头;
pre=&dummyNode;
curr=head;
而(空!=curr&&curr->mData<=val){
pre=curr;
curr=curr->mNext;
}
newNode->mNext=curr;
pre->mNext=newNode;
返回虚拟节点。mNext;
}

ListNodeMerge(ListNodehead1,ListNode*head2){
ListNode dummyNode;
ListNode*dummy=&dummyNode;
而(空!=头1&&空!=head2){
if(head1->mData<=head2->mData){
dummy->mNext=head1;
头1=头1->m下一个;
}else{
dummy->mNext=head2;
头2=头2->m下一个;
}
dummy=dummy->mNext;
}
if(NULL!=头1)假人->m下一个=头1;
如果(空!=head2)dummy->mNext=head2;

返回虚拟节点。mNext;
}

voidBucketSort(int n,intarr[]){
vector<ListNode>buckets(BUCKET_NUM,(ListNode)(0));
for(inti=0;i<n;++i){
intindex=arr[i]/BUCKET_NUM;
ListNode*head=buckets。at(index);
桶。at(index)=insert(head,arr[i]);
}
ListNode*head=buckets.在(0);
for(inti=1;i<BUCKET_NUM;++i){
head=Merge(head,buckets.在(i));
}
for(inti=0;i<n;++i){
arr[i]=head->mData;
头=头->mNext;

    }

}

相关文章
|
6月前
|
安全 测试技术
认识-认知
认识-认知
101 0
|
Kubernetes 负载均衡 网络协议
K8S 的新认知与初领会
我们今天开始正式进⼊ Kubernetes 的课程学习,Kubernetes 相信各位已经听过很多次了,那么什么是 Kubernetes呢?
K8S 的新认知与初领会
|
存储 算法 搜索推荐
认知算法(三)
认知算法(三),一起来学习吧。
认知算法(三)
|
机器学习/深度学习 算法 搜索推荐
认知算法(一)
认识算法(一),一起来学习吧。
认知算法(二)
认知算法(二),一起来学习吧。
|
算法 搜索推荐 大数据
认知算法(八)
认知算法(八),一起来学习吧。
|
算法 搜索推荐 索引
认知算法(七)
认知算法(七),一起来学习吧。
|
算法 JavaScript 前端开发
认知算法(九)
认知算法(九),一起来学习吧。
|
机器学习/深度学习 存储 算法
认知算法(四)
认知算法(四),一起来学习吧。
|
算法 搜索推荐
认知算法(十)
认知算法(十),一起来学习吧。