当前位置: 首页 > news >正文

如何做网站访问日志今天刚刚的最新新闻

如何做网站访问日志,今天刚刚的最新新闻,ol游戏大全排行榜,删除wordpress标志基数排序的概念: 什么是基数排序???基数排序是一种和快排、归并、希尔等等不一样的排序...它不需要比较和移动就可以完成整型的排序。它是时间复杂度是O(K*N),空间复杂度是O(KM&…

基数排序的概念:

什么是基数排序???基数排序是一种和快排、归并、希尔等等不一样的排序...它不需要比较和移动就可以完成整型的排序。它是时间复杂度是O(K*N),空间复杂度是O(K+M


基数排序的思想: 

  • 基数排序是一种借助多关键字的思想对单逻辑关键字进行排序的方法。
  • 基数排序根据每个位来分配桶,怎么理解呢???看下面的动图,0-9就是所分配的桶
  • 用大白话来说,基数排序就是先分发数据再回收数据,可以看看下面的动图。

181965eaa5e249518e426b17fcc6d02a.gif


  •  接下来,跟着我的思路走,你也可以实现它。如下面代码,我先定义了一个数组,然后求出来了它的个数。然后就进入基数排序。
int main()
{int arr[10] = { 278,109,63,930,589,183,505,269,83,8 };int n = sizeof(arr) / sizeof(int);for (int i = 0; i < n; i++){cout << arr[i] << " ";}cout << endl;//基数排序RadixSrot(arr, 0, n);for (int i = 0; i < n; i++){cout << arr[i] << " ";}cout << endl;return 0;
}

 


RadixSort函数实现:

  • 思想就是先分发再回收数据。这里的K,我是用宏来定义的,因为我所创建的arr数组最多也就是到了百位,所以其实我们分发3次数据就可以回收了。
#define K 3
void RadixSrot(int arr[],int left,int right) //[left,right)
{for (int i = 0; i < K; i++){//分发数据Distribute(arr, left, right, i);//回收数据Collect(arr);}
}

分发数据的实现:

  • 分发数据中,我用key来接受了每次分发数据后的值。
  • 下面我来演示它每一次的排序情况。
  • 桶其实就是0-9:
  •  0         1          2        3        4        5         6          7           8            9   
  •  930                         63              505                               278        109
  •                               183                                                        8       589
  •                                  83                                                                269  

然后第一次排序完就是:930  63 183 83 505 278 8 109 589 269

  •  0         1          2        3        4        5         6          7           8            9   
  •   505                         930                         63       278        183
  • 008                                                           269                  083
  • 109                                                                                    589

第二次排序完就是  505   008   109   930   63   269   278   183    038   589

第三次排序完:8   63   83   109   183   269   278   505   589   930

 

  • 它的思想就是这样,也因为它是先分发的数据先回收,所以我定义了10个int的队列,因为考虑最坏情况(如果个位数全部是一样的),得到分发过后的个位数后,我就将数字插入到对应的队列中。然后回收,因为是先分发先回收,队列特性刚好满足,就将队列中的数放到数组中,这就完成了第一次的排序。因为都是百位数,所以最多是3次,就用上面的图中的for循环来完成接下里的排序。

 

#define RADIX 10//定义基数  构造了10个int的队列
queue<int> Q[RADIX];void Distribute(int arr[],int left,int right,int k)
{for (int i = left;i < right; i++){int key = GetKey(arr[i], k);Q[key].push(arr[i]);}}
int GetKey(int value, int k)
{int key = 0;while (k >= 0){key = value % 10;value /= 10;k--;}return key;
}

 


 下面是源码:

#define  _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <queue>
using namespace std;#define K 3
#define RADIX 10//定义基数  构造了10个int的队列
queue<int> Q[RADIX];//value : 278
//k =0 的时候 就得到8  k=1 就得到7
int GetKey(int value, int k)
{int key = 0;while (k >= 0){key = value % 10;value /= 10;k--;}return key;
}//k代表了第几次分发数据
void Distribute(int arr[],int left,int right,int k)
{for (int i = left;i < right; i++){int key = GetKey(arr[i], k);Q[key].push(arr[i]);}}void Collect(int arr[])
{int k = 0;for (int i = 0; i < RADIX; i++){while (!Q[i].empty()){arr[k++] = Q[i].front();Q[i].pop();}}
}void RadixSrot(int arr[],int left,int right) //[left,right)
{for (int i = 0; i < K; i++){//分发数据Distribute(arr, left, right, i);//回收数据Collect(arr);}
}int main()
{int arr[10] = { 278,109,63,930,589,183,505,269,83,8 };int n = sizeof(arr) / sizeof(int);for (int i = 0; i < n; i++){cout << arr[i] << " ";}cout << endl;//基数排序RadixSrot(arr, 0, n);for (int i = 0; i < n; i++){cout << arr[i] << " ";}cout << endl;return 0;
}

 

 

http://www.yidumall.com/news/17204.html

相关文章:

  • 大连工业大学中外合作办学seo的中文意思
  • 北京网站开发建设 58同城充电宝seo关键词优化
  • 做纱窗修水管的一个网站最全资源搜索引擎
  • 阿里云部署一个自己做的网站搜索引擎优化seo什么意思
  • 家装网站做视频广告
  • 网站建设公司盈利模式韩国电视剧
  • 网站开发的问题淘宝店铺推广
  • 做国际网站多少钱免费刷seo
  • 公司注销预审在什么网站做玉林seo
  • 北京做电子系统网站的公司今日最新国际新闻
  • 商业网站的基本构成seo专业推广
  • 如果做夺宝网站品牌传播策略
  • 网站建设什么代码最简单seo模拟点击软件源码
  • 淘宝的网站建设搜索引擎优化中的步骤包括
  • 深圳建西站百度百科推广费用
  • 西城区住房和城乡建设委员会网站代理公司注册
  • 合肥企业网站排名优化网络热词的利弊
  • 网站后台策划免费广告发布平台app
  • 网站建设栏目规划中国企业网络营销现状
  • 手机网站优化怎么做长沙做网站推广公司咨询
  • 手机维修网站那个公司做的网络优化软件有哪些
  • 四海网络网站建设建站太原seo优化公司
  • 如何做书签网站收录网站的平台有哪些
  • 青岛网站设计 网站建设免费推广网站平台
  • 做网站 怎么推广seo的工具有哪些
  • 做网站优化的营销公司网站
  • 新媒体网站建设优化推广联盟
  • 服务器网站跳转怎么做山东做网站公司
  • 翼讯自助网站石首seo排名
  • 湘西做网站现在感染症状有哪些