三维网格精简算法java版_几种常见算法的精简版-

1 packagetest;2

3 importjava.nio.channels.SelectableChannel;4

5 importcom.itqf.bean.User;6

7 public classcTypeCode {8

9 /********************************************希尔排序和插入排序*******推荐严慧敏的那本数据结构,思想步骤我都加入到算法里面了,很精简了***********************************************************10 * 插入排序11 *12 *@paramvalues13 * 带排序数组14 */

15 public void insertSort(int[] values) {16 int mod;//中间值

17 for (int i = 1; i < values.length; i++) {18 mod = values[i];//记录初始位置的值,完成交换

19 int index = 0;//记录位置

20 for (int j = i; j >= 1; j--) {21 //如果前面的值比后面的值小,就后 移

22 if (values[j - 1] >mod) {23 values[j] = values[j - 1];24 } else{25 index =j;26 break;27 }28 }29 values[index] =mod;30 }31

32 }33

34 /**

35 * shell sort36 * 希尔排序是对插入排序的一个改进,相隔几个增量的递进式排序,直到增量为1。。所有的增量必须只能被1除。37 *@paramvalues38 * valuies which wait for sroted39 *@paramdk40 * added values41 */

42 public void shellSort(int[] values, intdk) {43 if (dk >values.length) {44 System.out.println("values is beyond the binder");45 return;46 }47 //* 1.使用增量循环遍历数组

48 for (int i = dk; i < values.length; i++) {49 //* 2.创建保留初始比较值得变量,创建保存比较值的下标值的变量

50 int mod =values[dk];51 int index = 0;52 //* 3.遍历后面已经排好序的序列,退出循环

53 for (int j = i; j >= dk; j -=dk) {54 //在合适的地方插入比较值,如果比较值小于当前值,就交换,

55 if (values[j - dk] >mod) {56 values[j] = values[j -dk];57 } else{58 //否则,记下比较值的下标,进行交换,

59 index =j;60 break;61 }62 }63 //4.在下标处填入初始比较值,第一轮比较完成

64 values[index] =mod;65 }66 }67

68 /********************快速排序分割线***********************************************************************************69 * 快速排序方法 为什么会采用这种归位那,因为始终是在和枢轴进行比较,就没有必要进行枢轴的交换了。70 *71 *@paramvalues72 * 待排序数组73 *@paramlow74 * 最低位下标75 *@paramhigh76 * 最高位下标77 */

78 public static int quickSort(int[] values, int low, inthigh) {79 //1.确定枢轴,以第一个为枢轴80 //1.1 为了提高性能,采用三者取中方法,可大大提高乱序情况下的性能

81 intpivotKey;82 int[] keys = { values[low], values[high], values[(low + high) / 2] };83 pivotKey = keys[0];84 for (int i = 0; i < keys.length - 1; i++) {85 if (pivotKey

90 while (low

92 while (low < high && values[high] >=pivotKey)93 --high;94 //2.2 把高位赋值给低位

95 values[low] =values[high];96 //3.从最低位开始依次递增检查大于枢轴的关键字,和high交换

97 while (low < high && values[low] <=pivotKey)98 ++low;99 //把低位赋值给高位

100 values[high] =values[low];101 //4.重复2和3步骤

102 }103 //5.枢轴归位

104 values[low] =pivotKey;105 //6.返回枢纽位置

106 returnlow;107

108 }109

110 /**

111 * 快速排序完整部分112 *113 *@paramvalues114 *@paramlow115 *@paramhigh116 */

117 public static void overrallSort(int[] values, int low, inthigh) {118 if (low

121 overrallSort(values, low, index - 1);122 //枢轴右半部排序

123 overrallSort(values, index + 1, high);124 }125 }126

127 /**

128 * 选择排序129 *130 *@paramvalues131 */

132 public static void selectSort(int[] values) {133 for (int i = 0; i < values.length - 1; i++) {134 for (int j = i; j < values.length; j++) {135 if (values[i] >values[j]) {136 //交换关键字

137 int mad =values[i];138 values[i] =values[j];139 values[j] =mad;140 }141 }142 }143

144 }145

146 /****************************************************大顶堆排序算法************************************147 * 堆排序148 *@parama149 *@paramb150 *@return

151 */

152 public boolean isBig(int a, intb) {153 if (a

159 /**

160 * 此部分算法,视为最简洁堆排序算法。比网上大部分都要好,但是难理解,把这个算法理解了,你会发现很简洁的算法。161 *@paramvalues162 *@paramstart163 *@paramhigh164 */

165 public void heapAdjust(int[] values, int start, inthigh) {166 int rc =values[start];167 for (int i = 2 * start; i <= high; i *= 2) {//沿着key较大的孩子节点向下筛选

168 if (i < high && !isBig(values[i], values[i + 1])) {//i为较大的记录的下标

169 i++;//如果i是小的记录,就把i加一,变为沿着另一个子节点向下跑

170 }171 if (isBig(rc, values[i])) {//如果rc大于最大的子节点,就把rc插入到start的位置,也就是父节点,然后这一部分的堆排序结束

172 break;//rc应该插入到s位置上

173 }174 values[start] = values[i];//rc不大于最大的子节点,就把最大的子节点放到父节点的位置,进行下一次循环堆排序

175 start = i;//沿着key值最大的节点向下筛选

176 }177 values[start] = rc;//插入,也可以理解为归位

178 }179

180 public void heapSort(int[] values) {181 /**

182 * 堆排序要解决两个问题。 第一,如何由无序序列建成一个堆 第二,如何在输出堆顶元素之后,调整剩余元素成为一个新的堆 现在建立大根堆183 */

184 for (int i = (values.length - 1) / 2; i >= 0; i--) {185 heapAdjust(values, i, values.length - 1);186 }187 for (int i = values.length - 1; i > 0; i--) {188 //交换堆顶最大值和最后一个记录

189 int mad = values[0];190 values[0] =values[i];191 values[i] =mad;192 heapAdjust(values, 0, i - 1);193 }194 }195

196 /***********************************************************************归并排序算法分割线*********************************************197 * 归并部分排序算法198 *199 *@paramvalues200 *@paramlow201 *@parammad202 *@paramhigh203 */

204 public static void merge(int[] values, int low, int mad, inthigh) {205 int[] tr = new int[high + 1];//辅助序列

206 int low1 =low;207 int high1 =high;208 inti;209 int j = mad + 1;210 //* 第一步:循环整个序列,分为两部分进行比较,数值大的加入到辅助序列中,重复此步骤

211 for (i = low; low <= mad && j <= high; i++) {212 if (values[low] >values[j]) {213 tr[i] = values[low++];214 } else{215 tr[i] = values[j++];216 }217 }218 //* 第二步,把还有剩余的部分加入到辅助序列中

219 if (j <=high) {220 tr[i] = values[j++];221 }222 if (low <=mad) {223 tr[i] = values[low++];224 }225 //* 第三步:把辅助序列中排好序的序列恢复到原先的存储中226 //把排序好的序列恢复到原序列中

227 for (int j2 = low1; j2 <= high1; j2++) {228 values[j2] =tr[j2];229 }230

231 }232

233 /**

234 * 归并排序235 *@paramvalues236 *@paramlow237 *@paramhigh238 */

239 public static void mSort(int[] values, int low, inthigh) {240 if (low == high) {//如果相等,就返回

241 return;242 } else{243 int mad = (low + high) / 2;244 mSort(values, low, mad);245 mSort(values, mad + 1, high);246 merge(values, low, mad, high);247 }248 }249

250

251 /**************************************************************************************简单哈希算法分割线*************************************************252 * 在hash表中查找指定值253 * 首先看一下,用hash函数得出来的hash地址位置上是否有值并且和要查找的值相等,如果相等,就返回,如果不相等,就继续查找下一个。、254 * 不为空和不相等,同时成立,才会有找下去的必要,其他情况没有必要找下去。比如,位置为空,就可以直接退出了。255 *256 *@paramhashTable257 *@paramvalue258 */

259 public boolean searchHash(int[] hashTable, intvalue) {260 //计算hash值

261 int hashCode =getHashCode(value, hashTable.length);262 //检测用hash函数得出来的hash地址位置上是否有值并且和要查找的值相等,两者都不想等,继续查找。找到退出循环263 //不为空和不相等,同时成立,才会有找下去的必要,其他情况没有必要找下去。比如,位置为空,就可以直接退出了。

264 while (hashTable[hashCode] != 0 && hashTable[hashCode] !=value) {265 hashCode++;266 }267 //找到就返回成功

268 if (hashTable[hashCode] ==value) {269 return true;270 }271 return false;272

273 }274

275 /**

276 * 计算hash值277 *278 *@paramvalue279 * 关键字280 *@paramlength281 * hash表长度282 *@return

283 */

284 public int getHashCode(int value, inthashLength) {285

286 return value %hashLength;287

288 }289

290 public static voidmain(String[] args) {291

292 //TODO Auto-generated method stub

293

294 int[] values = { 12, 8, 2, 3, 4, 78, 96, 52};295 //

296 // //overrallSort(values, 0, values.length-1);297 // //int index = quickSort(values, 0, values.length-1);298 //selectSort(values);299 //System.out.println(index);300

301

302 //user.heapSort(values);堆排序

303 mSort(values, 0, values.length - 1);//归并排序 这个归并排序有点问题,最后一个为什么是0,我看不出来,有看出来的,请回答,谢谢。

304 for (int i = 0; i < values.length; i++) {305 System.out.print(values[i] + " ");306 }307 }308 }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471673.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DokuWiki 命名空间管理

为了更好的组织结构&#xff0c;Dokuwiki提供了命名空间这个功能&#xff0c;那怎么管理命名空间的&#xff0c;其实可以安装插件去管理 Add New Page Plugin&#xff1a;新建界面 https://www.dokuwiki.org/plugin:addnewpage Move Plugin&#xff1a;方便移动页面和命名空间 …

css样式子绝父相,子绝父相_HTML+CSS前端基础知识教程_腾讯视频

更多资料源码请加3252897743第1天 html 1、HTTP协议 2、html是纯文本3、html骨架4、DTD文档类型5、head标签6、body标签7、html基本语法8、h系列的标签9、p标签10、img标签11、a标签12、div和span含义第2天 html1、无序列表2、有序列表3、定义列表6、表格基础7、合并单元格…

shell命令查阅端口信息_linux运维实用的42个常用命令总结

1.删除0字节文件复制代码代码如下:find -type f -size 0 -exec rm -rf {} \;2.查看进程按内存从大到小排列复制代码代码如下:ps -e -o "%C : %p : %z : %a"|sort -k5 -nr3.按cpu利用率从大到小排列复制代码代码如下:ps -e -o "%C : %p : %z : %a"|sort -nr…

python 代码文件路径注意事项

检查代码的工作路径&#xff0c;是不是代码文件所在路径 导入别处的包 基于该代码的工作路径写如下的代码&#xff0c;加入相对路径&#xff0c;可以找到要导入的文件 import sys import os sys.path.append("../xxx/") sys.path.append("../../xxx") fro…

uva 10635 Prince and Princess(LCS成问题LIS问题O(nlogn))

标题效果&#xff1a;有两个长度p1和q1该序列。的各种元素的每个序列不是相互同。并1~n^2之间的整数。个序列的第一个元素均为1。求出A和B的最长公共子序列长度。 分析&#xff1a;本题是LCS问题&#xff0c;可是p*q<62500,O(pq)的算法显然会LE。在这里有一个条件&#xff0…

微信小程序独立服务器的好处,微信小程序的优势和缺点

原标题&#xff1a;微信小程序的优势和缺点微信小程序从刚开始面世就引起了很多人的关注&#xff0c;虽然截止到目前&#xff0c;官方仍没有大肆宣传和推广&#xff0c;但是微信小程序的所带来的影响还是很大的&#xff0c;甚至让苹果&#xff0c;百度&#xff0c;阿里都头疼不…

LeetCode 2007. 从双倍数组中还原原数组(map)

文章目录1. 题目2. 解题1. 题目 一个整数数组 original 可以转变成一个 双倍 数组 changed &#xff0c;转变方式为将 original 中每个元素 值乘以 2 加入数组中&#xff0c;然后将所有元素 随机打乱 。 给你一个数组 changed &#xff0c;如果 change 是 双倍 数组&#xff…

ajax和rxjs,javascript – RxJS 5 Observable和Angular2 http:调用ajax一次,保存结果,随后的ajax调用使用缓存结果...

下面的代码是我目前拥有的简化版本&#xff1a;name.service.tsInjectable()export class NameService {const nameURL "http://www.example.com/name";getName() {return this.http.get(nameURL);}}name1.component.tsComponent({templateUrl: ./name1.component.h…

怎么画韦布尔分布_手机按键寿命测试的样本数量怎么定?一文看懂 简述威布尔分布及其应用...

有一种手机按键的质量要求是&#xff0c;95%的产品的按压寿命需要达到1万次。根据这一要求&#xff0c;QC部门需要进行1.2万次的按压测试。那么QC部门需要选取多少按键来进行测试&#xff08;不允许有失效&#xff09;&#xff0c;才能保证95%的按键按压寿命达到1万次呢&#x…

Chrome浏览器报错:Origin null is not allowed by Access-Control-Allow-Origin.

问题&#xff1a;Chrome浏览器报错&#xff1a;Origin null is not allowed by Access-Control-Allow-Origin. 原因&#xff1a;.js文件中使用load()方法&#xff0c;而Chrome浏览器出于安全起见&#xff0c;不允许load本地文件。 方法&#xff1a;给Chrome添加启动参数--allow…

LeetCode 2008. 出租车的最大盈利(DP)

文章目录1. 题目2. 解题1. 题目 你驾驶出租车行驶在一条有 n 个地点的路上。 这 n 个地点从近到远编号为 1 到 n &#xff0c;你想要从 1 开到 n &#xff0c;通过接乘客订单盈利。 你只能沿着编号递增的方向前进&#xff0c;不能改变方向。 乘客信息用一个下标从 0 开始的二…

plotplay恢复默认设置_手把手解答win10系统potplayer经常弹出自动更新提示的还原技巧...

电脑犹如汽车&#xff0c;在使用过程中需要正确的方法&#xff0c;否则就会有win10系统potplayer经常弹出自动更新提示的情况出现&#xff0c;要处理win10系统potplayer经常弹出自动更新提示的问题&#xff0c;对于电脑专业人士来说并非难事&#xff1b;新手小白翻遍了整个网络…

华为服务器清除系统日志,清空服务器日志

清空服务器日志 内容精选换一换为加强对系统数据的容灾管理&#xff0c;云堡垒机支持配置日志备份&#xff0c;提高审计数据安全性和系统可扩展性。本小节主要介绍如何在系统配置FTP/SFTP服务器参数&#xff0c;将日志远程备份至FTP/SFTP服务器。开启远程备份后&#xff0c;系统…

动态行转列小记

数据库环境&#xff1a;SQL SERVER 2005 最近在整理数据时&#xff0c;要将查询到的数据张贴到Excel中。在Excel中&#xff0c;要展示的行数是固定的&#xff0c;列数不固定&#xff0c; 一个一个数据的复制张贴太烦人。想了一个偷懒的方法&#xff0c;直接将查询的数据进行行转…

使用swiper_关于使用swiper制作web轮播图

我这个方法是很适用于小白的&#xff0c;利用swiper插件的应用。https://www.swiper.com.cn/这个是swiper中文官网的网址&#xff0c;上面有关于swiper的说明和使用方法。想要用到swiper插件要在官网下载swiper文件&#xff0c;如下图所示&#xff0c;在导航条上面找到下载swip…

服务器换完主板后无盘进不了系统,更换主板后主板认不出硬盘无法进入系统的办法 – 手机爱问...

系统重装技术问题只需要一张系统光盘&#xff0c;和一张随机驱动光盘。如果没有驱动光盘&#xff0c;在安装系统前&#xff0c;用超级兔子或“驱动精灵”。备份驱动程序。安装好系统后恢复驱动即可。其它不需要方法&#xff1a;步骤:首先进入BIOS设置光驱优先。1)首选按Del键进…

动态规划_数字三角形

问题描述&#xff1a;在下面的数字三角形中寻找一条从顶部到底边的路径&#xff0c;使得路径上所经过的数字之和最大&#xff0c;路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可&#xff0c;不必给出具体路径。 输入数据的要求&#xff1a;三角形的行数大于1小…

LeetCode 2012. 数组美丽值求和

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的整数数组 nums 。对于每个下标 i&#xff08;1 < i < nums.length - 2&#xff09;&#xff0c;nums[i] 的 美丽值 等于&#xff1a; 2&#xff0c;对于所有 0 < j < i 且 i < k < nums.length - 1 …

arcgis 属性表 汇总_ArcGIS实践教程(19)ArcGIS/ArcMap中属性表的合并方法

merge: 功能一&#xff1a;可以联合 一般的属性表&#xff0c;合并属性或者说挂接属性&#xff01;例如&#xff1a;县polygon&#xff0c;只有name属性&#xff0c;现在需要添加他的邮编、区号、人口、面积、代码等等信息&#xff0c;现在搜集到了这些信息&#xff0c;并且放到…

华为服务器上传文件后怎么通过链接查看,远程服务器文件上传后的操作

远程服务器文件上传后的操作 内容精选换一换本节指导您基于Linux操作系统环境完成镜像文件快速导入&#xff0c;推荐使用云平台的EulerOS云服务器作为转换镜像格式和生成位表文件的环境。Linux操作系统环境下&#xff0c;建议使用qemu-img-hw工具进行镜像格式转换。已完成镜像文…