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

蓝色机械企业网站模板网站建设费的摊销年限

蓝色机械企业网站模板,网站建设费的摊销年限,做电影下载网站还赚钱吗,百度网站首页目录 1.定义 2.洛谷: P1177 模版排序题 题目描述 输入格式 输出格式 输入输出样例 说明/提示 3.算法 过程 时间复杂度分析 4.代码 5.提交结果 6.思考题:如果带上负数又应该怎么排序? 1.定义 和常规意义上的排序算法不同,基数排序不需要比较交换数据,也不需要像…

目录

1.定义

2.洛谷: P1177 模版排序题

题目描述

输入格式

输出格式

输入输出样例

说明/提示

3.算法

过程

时间复杂度分析 

4.代码

5.提交结果

6.思考题:如果带上负数又应该怎么排序?


1.定义

和常规意义上的排序算法不同,基数排序不需要比较+交换数据,也不需要像快速排序那样选key后比较关键字

基数排序(Radix Sorting,radix n.基数):一种利用多关键字进行分配类排序的方法

解释多关键字:扑克牌从小到大排序

扑克牌一共54张牌,其中52张是正牌,另2张是副牌(大王和小王)

52张正牌按花色一共分为4组:黑桃组♠、红桃组♥、梅花组♣、方块组♦

认为花色的大小关系为:♣ < ♦ < ♥ < ♠ 

每组花色的牌的面值包括从1~10以及J、Q、K牌,大小关系`1<2<...<10<J<Q<K

其中花色的地位比面值高,那就有两种排序方法

最高位(注:位指的是地位)优先法(Most Significant Digit First):花色的地位比面值高,先按花色排

最低位优先法(Least Significant Digit first):面值的地位比花色低,先按面值排

2.洛谷: P1177 模版排序题

https://www.luogu.com.cn/problem/P1177

题目描述

将读入的 N 个数从小到大排序后输出。

输入格式

第一行为一个正整数 N。

第二行包含 N 个空格隔开的正整数 ai​,为你需要进行排序的数。

输出格式

将给定的 N 个数从小到大输出,数之间空格隔开,行末换行且无空格。

输入输出样例

输入 #1

5
4 2 4 5 1

输出 #1

1 2 4 4 5

说明/提示

对于 20% 的数据,有 1≤N≤103;

对于 100% 的数据,有 1≤N≤105,1≤ai​≤109。

3.算法

过程

以一个例子说明基数排序,设有一个无序数组nums={123,789,012,2,0,99,147,83,091,235},数组中的元素的值>=0,要求从小到大排序

按"重复先分发后回收步骤"的思想排序,排序后的数组相邻元素之间一定满足个位<=个位,十位<=十位,百位<=百位

数组中的元素最多3位,这些位为个位、十位、百位

显然地位上:百位>十位>个位,如果按照最低位优先法排序,那就按个位、十位、百位的顺序进行基数排序,其实类似哈希桶的思想:将不同的数字分成不同的数据堆,数据堆可以看成桶

可以创建一个队列数组queue<int> tmp[10],其中tmp[i]表示存储位值为i的队列

例如:123按个位分类时,其个位为3,那就进入tmp[3]的队列

取出元素的各个位的方法:

设某元素的值为x

个位:x/10^0%10

十位;x/10^1%10

百位:x/10^2$10

......

按个位分类,从头到尾遍历数组,先分发

tmp[0]~tmp[9]依次pop(元素)重新拷贝到原来的数组中,后回收

nums={0,91,12,2,123,83,235,147,789,99},个位满足从大到小的顺序

按十位分类,从头到尾遍历数组,先分发

tmp[0]~tmp[9]依次pop(元素)重新拷贝到原来的数组中,后回收

nums={00,02,12,123,235,147,83,789,91,99},个位和十位都满足从大到小的顺序

按百位分类,从头到尾遍历数组,先分发

tmp[0]~tmp[9]依次pop(元素)重新拷贝到原来的数组中,后回收

nums={000,002,012,083,091,099,123,147,235,789},个位、十位和百位都满足从大到小的顺序,那数组就是有序的

时间复杂度分析 

纯数字排序的时间复杂度:如果数组中一共N个元素,其中元素的最高位为第M位,那么每次分配的时间复杂度为O(N),每次回收的时间复杂度为O(m),一共要重复先分发后回收m次,总时间复杂度为

4.代码

读题发现所有元素都是正数,可以用position来控制第几位,power_10表示10的次方,那么分发num[j]的第position位的值position_val为

(nums[j] / power_10) % 10,可push到对应的子队列中:tmp[position_val].push(nums[j])

那么可以使用循环来回收tmp[k]:

while (!tmp[k].empty())
{nums[l++] = tmp[k].front();tmp[k].pop();
}

则完整代码为: 

用C语言比较麻烦,要自己实现数据结构,这里用C++(放到C语言专栏只是为了好管理)

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
class Solution {
public:vector<int> sortArray(vector<int>& nums){//使用队列queue<int> tmp[10];int position = 0;int power_10 = 1;//10的n次方//1≤ai​≤10^9,最多10位while (position <= 10){for (int j = 0; j < nums.size(); j++){//先分发int position_val = (nums[j] / power_10) % 10;tmp[position_val].push(nums[j]);}power_10 *= 10;//后回收for (int k = 0, l = 0; l < nums.size();){while (!tmp[k].empty()){nums[l++] = tmp[k].front();tmp[k].pop();}k++;}position++;}return nums;}
};int main()
{int n;cin >> n;vector<int> arr(n);for (int i = 0; i < n; i++)cin >> arr[i];//必须全是正数Solution().sortArray(arr);for (int i = 0; i < n; i++)cout << arr[i] << " ";
}

5.提交结果

6.思考题:如果带上负数又应该怎么排序?

因为负数的第position位的值为(( - nums[j]) / power_10) % 10,显然正数和负数要分开存储,分发时正数存储在positive_tmp队列数组中,负数存储在negative_tmp队列数组中

而回收时,由于负数越小,其绝对值越大,那就要按tmp[9]~tmp[0]的顺序出队

将以下代码放到LeetCode上测试:

class Solution {
public:vector<int> sortArray(vector<int>& nums){//使用队列queue<int> positive_tmp[10];queue<int> negative_tmp[10];//5 * 10^4=50000int position = 0;int power_10 = 1;//-5 * 10^4 <= nums[i] <= 5 * 10^4while (position <= 5){for (int j = 0; j < nums.size(); j++){//取出对应位添加到对应的子队列中if (nums[j] >= 0){int position_val = (nums[j] / power_10) % 10;positive_tmp[position_val].push(nums[j]);}else{int position_val = (( - nums[j]) / power_10) % 10;negative_tmp[position_val].push(nums[j]);}}power_10 *= 10;//拷贝回numsint k = 0, l = 0;  while (k <= 9){while (!negative_tmp[9 - k].empty()){nums[l++] = negative_tmp[9 - k].front();negative_tmp[9 - k].pop();}k++;}k = 0;while (k <= 9){while (!positive_tmp[k].empty()){nums[l++] = positive_tmp[k].front();positive_tmp[k].pop();}k++;}position++;}return nums;}
};

提交结果:


文章转载自:

http://oAKgnvsO.srnth.cn
http://26yoBRSo.srnth.cn
http://8jqHetPP.srnth.cn
http://2NwfxrkW.srnth.cn
http://fkzAisMI.srnth.cn
http://jUSd4hLQ.srnth.cn
http://O1QfMrCJ.srnth.cn
http://6ZxeODC8.srnth.cn
http://HkBkQDV2.srnth.cn
http://YMBWF6BK.srnth.cn
http://Q9GQUU63.srnth.cn
http://IY1IL9sL.srnth.cn
http://SpAu0JTD.srnth.cn
http://DqfQ5rlR.srnth.cn
http://rsx5uek8.srnth.cn
http://Rr5PL6jl.srnth.cn
http://K5dAInTi.srnth.cn
http://bFM1CsLu.srnth.cn
http://Tk3wEcen.srnth.cn
http://JudWnmPb.srnth.cn
http://95yOoxo9.srnth.cn
http://ZW1QKLmq.srnth.cn
http://zrq0mi1V.srnth.cn
http://tJhYZQRx.srnth.cn
http://qX010JF0.srnth.cn
http://jzmcBdqi.srnth.cn
http://FuYwsAWj.srnth.cn
http://kGm5q6AN.srnth.cn
http://5YkoJvDi.srnth.cn
http://dv3iCoGJ.srnth.cn
http://www.dtcms.com/wzjs/670572.html

相关文章:

  • 如何获取所有网站免费咨询服务
  • 9免费建网站社群营销策略有哪些
  • 汕头网站优化公司电脑怎么建网站
  • 技术网站品牌推广方案包括哪些
  • 哪里医院做无痛人流便宜 咨询网站在线做网站的电脑需要什么配置
  • 电子商务网站运营流程广州住建网站
  • 咸阳做网站开发公司网站管理系统哪个最好
  • 网站设计知识准备中文安卓开发工具
  • 怎么申请 免费网站空间旅游主题网站策划书
  • 百度网址大全网站大全从化区城郊街道网站麻二村生态建设
  • 网站后台维护一般要怎么做王也头像高清
  • 做网站网页的公司网站建设好还需要续费吗
  • 兰州网站制作公司在哪里国家住房和城乡建设部官网
  • 住房和城乡建设部网站科技项目wordpress附件投稿
  • 襄阳大摩网站建设wordpress整站迁移
  • 冷水江网页定制公司网站 seo
  • 岱山县网站建设wordpress系统教程 pdf
  • 浦东做网站的公司网络营销的理论
  • 简述一个商务网站建设的步骤化妆品行业网站建设
  • 品牌营销网站宁波妇科中医哪个好
  • 烟台网站建设地址高清的网站建设
  • 网站建设 美词原创中国工商网注册官网
  • 温州专业营销网站费用长沙网站seo多少钱
  • 大酒店网站源代码常见软件开发模型有哪些
  • 黄石本地做网站的集团公司网站源码php
  • 域名注册网站查询闵行网站开发
  • 英文旅游网站建设wordpress首页不显示
  • 个人主页网站视频网站 阿里云
  • dede网站模板页在什么文件夹宁波网站制作公司哪家好
  • 五合一营销型网站找外包做网站不给代码