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

龙岗网站制作市场北京搜索关键词优化

龙岗网站制作市场,北京搜索关键词优化,手机网站开发c 教程,网站建设服务方案ppt一、基数排序 #xff08;1#xff09;基数排序的简介 基数排序不同于其他的排序算法#xff0c;它不是基于比较的算法。基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。它是一种稳定的排序算法。  通常用于对数的排序选择的是最低位优先法#xff…一、基数排序 1基数排序的简介 基数排序不同于其他的排序算法它不是基于比较的算法。基数排序是一种借助多关键字排序的思想对单逻辑关键字进行排序的方法。它是一种稳定的排序算法。  通常用于对数的排序选择的是最低位优先法即先对最次位关键字进行排序再对高一位的关键字进行排序以此类推。 2基数排序的思想 多关键字排序中有两种方法最高位优先法(MSD)和最低位优先法LSD。 元数据为k1k2k3..kn A、最高位优先(Most Significant Digit first)法先按k1排序分组同一k1组中记录关键码k1相等对各k1组按k2关键字排序分成k2子组同一k2子组中记录关键码k2相等再对各k2子组按k3排序分成k3子组重复这样步骤直至子组按kn排序分成kn子组。再将各组连接起来便得到一个有序序列。B、最低位优先(Least Significant Digit first)法先从kn开始排序再对kn-1进行排序依次重复直到对k1排序后便得到一个有序序列。二、最高位优先(Most Significant Digit first)法 public static void radixSort(int[] data) {//位数if(data.length2)return;int place getPlace(data);//位数大于0if (place 0) {sortUnit(data, 0, data.length, 1, place);}}/*** MSD算法* param data* param s 起始位置* param e 截止位置是最后一个数据的索引1* param curPlace 当前所在数据位置从左边开始起始值为1* param totalPlace 最大数据的位数*/private static void sortUnit(int[] data, int s, int e, int curPlace, int totalPlace) {//十个桶int[] counts new int[10];int p;//计算各个桶的数据个数for (int i s; i e; i) {p getDigit(data[i], curPlace,totalPlace);//获取数据当前位的值counts[p];}//计算各个桶的数据右边索引界限for (int i 1; i counts.length; i) {counts[i] counts[i] counts[i - 1];}//创建数组将所有桶都存放在这个数组里面int[] bucket new int[e - s];int dat;//从右往左扫描保证了算法的稳定性for (int i e-1; i s; i--) {dat data[i];p getDigit(dat, curPlace,totalPlace); //获取数据当前位的值counts[p]--; //找到属于桶的最后一个位置bucket[counts[p]] dat;}//将数据回填回dataSystem.arraycopy(bucket, 0, data, s, bucket.length);int start;int end;//根据Ki分组的每个桶都去创建根据Ki1分组的子桶for (int i 0; i counts.length; i) {start s counts[i];//左边界//右边界if (i 1 counts.length) {end s counts[i 1];} else {end e;}//桶里数据大于2基数位置未到Kn,继续分子桶if (end - start 1 curPlace totalPlace) {sortUnit(data, start, end, curPlace 1, totalPlace);}}} 其他方法调用 /*** 获取第curPlace位的数值* param d* param curPlace* return */private static int getDigit(int d, int curPlace,int totalPlace) {dd/((int) Math.pow(10, totalPlace-curPlace));return d % 10;}/*** 获取元数据的位数** param data* return*/private static int getPlace(int[] data) {//null值或者长度为0if (data null || data.length 1) {return 0;}if(data.length1){return String.format(%d, data[0]).length();}int[] mx getMaxAndMin(data);//最大值的绝对值int max Math.abs(mx[0]);//最小值的绝对值int min Math.abs(mx[1]);//最大值的绝对值的十进制位数max String.format(%d, max).length();//最小值的绝对值的十进制位数min String.format(%d, min).length();return Math.max(max, min);//最大位数}/*** 获取最大和最小值* param data* return */public static int[] getMaxAndMin(int[] data) {int[] mx {Integer.MIN_VALUE, Integer.MAX_VALUE};for (int d : data) {if (mx[0] d) {mx[0] d;} else if (mx[1] d) {mx[1] d;} }return mx;} View Code三、最低位优先(Least Significant Digit first)法 public static void radixSort(int[] data) {//位数if (data.length 2) {return;}int place getPlace(data);//位数大于0for (int i 0; i place; i) {sortUnit(data, i);}}/*** LSD算法** param data* param curPlace 当前所在数据位置从右边开始起始值为0*/private static void sortUnit(int[] data, int curPlace) {//十个桶int[] counts new int[10];int p;//计算各个桶的数据个数for (int i 0; i data.length; i) {p getDigit(data[i], curPlace);//获取数据当前位的值counts[p];}//计算各个桶的数据右边索引界限for (int i 1; i counts.length; i) {counts[i] counts[i] counts[i - 1];}//创建数组将所有桶都存放在这个数组里面int[] bucket new int[data.length];int dat;//从右往左扫描保证了算法的稳定性for (int i data.length - 1; i 0; i--) {dat data[i];p getDigit(dat, curPlace); //获取数据当前位的值counts[p]--; //找到属于桶的最后一个位置bucket[counts[p]] dat;}//将数据回填回dataSystem.arraycopy(bucket, 0, data, 0, bucket.length);} 其他方法 /*** 获取第curPlace位的数值** param d* param curPlace 从0开始* return*/private static int getDigit(int d, int curPlace) {d d / ((int) Math.pow(10, curPlace));return d % 10;}/*** 获取元数据的位数** param data* return*/private static int getPlace(int[] data) {//null值或者长度为0if (data null || data.length 1) {return 0;}if (data.length 1) {return String.format(%d, data[0]).length();}int[] mx getMaxAndMin(data);//最大值的绝对值int max Math.abs(mx[0]);//最小值的绝对值int min Math.abs(mx[1]);//最大值的绝对值的十进制位数max String.format(%d, max).length();//最小值的绝对值的十进制位数min String.format(%d, min).length();return Math.max(max, min);//最大位数}/*** 获取最大和最小值** param data* return*/public static int[] getMaxAndMin(int[] data) {int[] mx {Integer.MIN_VALUE, Integer.MAX_VALUE};for (int d : data) {if (mx[0] d) {mx[0] d;} else if (mx[1] d) {mx[1] d;}}return mx;} View Code四、算法的复杂度 基数排序的算法复杂度最好时间复杂度、最坏时间复杂度和平均时间复杂度都为O(d(nr))空间复杂度为O(nr)是稳定的算法。
http://www.yutouwan.com/news/482694/

相关文章:

  • 免费下载网站软件平台推广怎么写
  • 网站用户注册怎么做做个网站费用
  • app网站如何做推广方案莱阳做网站
  • 网络销售网站设置wordpress 显示异常
  • 做微信的网站有哪些云南做网站的公司
  • 网站标题tdk东莞网站优化方案
  • 外贸网站发外链在微信上怎么开店
  • 网站开发服务流程php网站维护
  • 可以做超链接或锚文本的网站有哪些页面设计包括什么
  • 什么行业需要做网站和推广比较好的公文写作网站
  • 受欢迎的邢台做网站网站建设涉及到哪些方面
  • 无人机网站建设开发一个手机系统有多难
  • 2020给个免费网站好人有好报制作精美网站建设服务周到
  • 朝阳做网站唐山做网站那家好
  • 四川网络推广石家庄网站排名优化哪家好
  • 韩顺平 开源网站动物网站建设
  • 网站开发做什么简单表情包做旧网站
  • 京东网站的设计特点手机app软件怎么开发
  • 成都网站制作成都上海响应式网站建设
  • 做淘宝客怎么做官方网站做装修效果图的网站有哪些软件下载
  • 工信部网站找回不了密码西宁微网站建设多少钱
  • 海淀企业型网站建设谷歌搜索引擎大全
  • 网站的规划我的世界服务器网站建设
  • 网站根目录 本地共享沈阳建设网站费用
  • 八年级信息网站怎么做网站底部关键词
  • 合肥城乡建设网站wordpress 内容发布
  • 老外做的汉字网站网站建设行业发展趋势
  • wordpress链接seo企业优化顾问
  • 怎样做网站分析总结可画官网登录入口
  • 长沙优化网站厂家开发一个网站需要多少人