已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/* * To change this template, choose Tools | Templates * and open the template in the editor. */package common;/* * Description 数据结构内部排序算法集合 * author 逍遥随风翼 */public class Sorting /* * 直接插入排序(第二类),更加简洁 * param init 初始数组 * param flag 大小标记;0:由小到大 * return 有序的init数组 */ public int insertSort(int init, boolean flag) for (int i = 1; i init.length; i+) int t = initi; if (flag) if (t = 0 & initj t; j-) initj + 1 = initj; initj + 1 = t; else if (t initi - 1) int j = i - 1; for (; j = 0 & initj t; j-) initj + 1 = initj; initj + 1 = t; return init; /* * 折半插入排序 * param init 初始数组 * param flag 大小模式,true:由小到大 * return 有序的init */ public int halfInsertSort(int init, boolean flag) / 低位、高位、中位 int low; int high; int m; boolean style;/ 第一个元素不予比较 for (int i = 1; i init.length; i+) low = 0; high = i - 1; while (low = high) m = (low + high) / 2; if (flag) style = initi initm; if (initi = initm) high = m; break; else if (style) high = m - 1; else low = m + 1; int t = inithigh + 1; inithigh + 1 = initi; for (int j = i; j - 1 = high + 1; j-) if (j - 1 != high + 1) initj = initj - 1; else initj = t; return init; /* * 希尔排序 * param init 初始数值 * param increment 增量(初始为init的大小) * param flag 大小模式,true:由小到大 * return 有序的init */ public int shellSort(int init, int increment, boolean flag) /*增量采用除2计算*/ increment /= 2; for (int i = increment; i init.length; i += increment) int t = initi; if (flag) if (t = 0 & initj t; j -= increment) initj + increment = initj; initj + increment = t; else if (t initi - increment) int j = i - increment; for (; j = 0 & initj t; j -= increment) initj + increment = initj; initj + increment = t; /*只要增量大于2(考虑到非整数的情况),则递归*/ if (2 = 1) for (int i = 0; i initi + 1; else style = initi high) axis = low; int ax = initaxis;/枢轴/ flag所导致的排序方式(由大到小为true,由小到大为false) boolean style_h; boolean style_l;/ 将原始数组高低位和枢轴在数组中的位置进行记录,/ 在排序中这些数据会发生改变 int LOW = low; int HIGH = high; int AXIS = axis - low;/枢轴的位置是和当前排序序列相对应的,而不是一个固定的值. while (low axis) if (flag) style_h = inithigh ax; if (style_h) initaxis = inithigh; axis = high; else high-; while (low ax; else style_l = initlow ax; if (style_l) initaxis = initlow; axis = low; else low+; if (low = high) initlow = ax; if (LOW low - 1) QuickSort(init, LOW, low - 1, LOW + AXIS, flag); if (low + 1 HIGH) QuickSort(init, low + 1, HIGH, low + 1 + AXIS, flag); return init; /* * 简单选择排序 * param init 初始数组 * param flag 大小模式,true:由小到大 * return 有序的init */ public int SimpleSelect(int init, boolean flag) int tempo;/中间变量 boolean style;/中间判断 for (int i = 0; i init.length - 1; i+) /最后一个记录不用进行比较 for (int j = i + 1; j init.length; j+) /需要和比本身大地所有标签进行比较 if (flag) style = initj initi; if (style) tempo = initi; initi = initj; initj = tempo; return init; /* * 堆排序 * param init 初始数组 * param flag 排序模式,true:由小到大 * return 有序的init */ public int heapSort(int init, boolean flag) int tempo; /*i代表当前结点的数组坐标,j代表i的左孩子结点*/ int j; /*最初,建立大顶堆*/ for (int i = init.length / 2 - 1; i = 0; i-) tempo = initi; /*j在每次循环是必须重新赋值*/ j = 2 * i + 1; while (j = init.length - 1) /*如果i的右孩子结点比左孩子大,则用右孩子结点进行比较*/ if (j initj : initj + 1 tempo : initj = 0; i-) tempo = initi + 1; initi + 1 = init0; init0 = tempo; /*复制上面的操作*/ tempo = init0; j = 1; while (j = i) if (j initj : initj + 1 tempo : initj tempo) init(j - 1) / 2 = initj; j = 2 * j + 1; else break; init(j - 1) / 2 = tempo; return init; /* * 归并排序 * param init 初始数组 * param re 待返回的数组(初始化为与init大小相等的空数组,可直接使用init) * param s 归并的开端(初始化为init的下标) * param t 归并的末端(初始化为init的上标) * param flag 大小模式,true:由小到大 * return re 有序的init */ public int mergSort(int init, int re, int s, int t, boolean flag) /*如果归并数组大小为1,返回*/ if (s = t) res = inits; else /*归并*/ int m = (s + t) / 2; int tem = new intinit.length; mergSort(init, tem, s, m, flag);/递归 mergSort(init, tem, m + 1, t, flag); /*合并*/ int i = 0; int j = 0; int k = 0; boolean bl; for (i = s, j = m + 1, k = s; i = m & j = t; k+) if (flag) bl = temi temj; if (bl) rek = temi; i+; else rek = temj; j+; /*k在最后已经自增*/ if (i = m) for (; k = t & i = m; k+, i+) rek = temi; else for (; k = t & j = 0 & exp = exponent) int e; int k = 0; for (int i = flag ? 0 : 9; flag ? i = 0; i = flag ? +i : -i) for (int j = 0; j = exponent) radixSort(re, init, exponent, exp, flag);/递归 else /*第一次进行
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汉语言文学毕业论文格式要求及写作方法,汉语言文学毕业论文写作方法
- 中考作文之中考议论文满分作文600字
- 临床试验药物供应的供应商审计要点
- 中国矿业大学本科生毕业论文格式模版
- 海尔企业的SWOT分析
- 2025年试议煤炭企业的成本管理
- 南京信息工程大学本科生毕业论文设计任务书
- 2025~2026学年重庆市垫江县人教版(小升初)数学检测试卷【附解析】
- 答辩评语模版
- 汽车生产相关设备保全管理方法的改进研究
- 屠宰企业安全生产应急预案
- 智慧农业的智能农机与装备
- 国家开放大学《财政与金融(农)》形考任务1-4参考答案
- 工程设计收费基价表(自动计算)
- 《流行音乐导论》知识考试题库(含答案)
- 建筑设备电气控制工程实验实训指导书
- 宣讲关于网络强国的重要思想专题课件ppt
- 区危化品运输车辆停车场专项应急预案
- 年度考核评分表实用文档
- dd5e人物卡可填充格式角色卡夜版
- 食品安全“周排查”记录表
评论
0/150
提交评论