陕西理工学院毕业设计
//轴记录关键字 String pivotkey = l[low]; //--代码跟随 MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{2}); //从表的两端交替向中间扫描 while(low < high) { ......从表的两端交替向中间扫描 } ......将l[0]插入到指定位置 return low; }
4.5归并排序
将字符串数组封装为Vector
private void mergeToShow(String[] sr,int s,int m,int t) { String[] tmp = new String[t - s +1]; //临时数据存储 Vector
4.6链表插入排序
将字符串数组封装为LinkData,同时利用GUI在ContentPanel(中间JPanel)中绘制数据。将moveArrows()切入到排序代码中,完成箭头的移动;flashNext()切入到排序代码中完成next索引选择处理效果。AccessoryPanel(右边JPanel)中加入JList,通过JList.setSelectedIndices
第 23 页 共 80 页
陕西理工学院毕业设计
(int[]i)完成代码跟随。将MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{});该方法切入到排序代码完成排序算法每一步实现效果。实现代码如下:
public void updateNextToShow(Node[] nodes, int i, int ibefore) { ......初始化i、q、p while (HanziToPinyin.getPingYin(nodes[i].getValue()).compareTo( HanziToPinyin.getPingYin(nodes[p].getValue())) > 0) { ......找出插入的位置 } //--代码跟随 MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{8}); flashNext(linkData, q); // q next修改 nodes[q].setNext(i); linkData.getNextUnit()[q].setValue(i + \ //--代码跟随 MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{9}); flashNext(linkData, i); // q next修改 nodes[i].setNext(p); linkData.getNextUnit()[i].setValue(p + \ }
4.7堆排序
将字符串数组封装为Vector
public void adjustHeapToShow(String[] num, int s, int t) { ......初始化显示数据 int i = s; for (int j = 2 * i; j <= t; j = 2 * j) { if (j < t && HanziToPinyin.getPingYin(num[j]).compareTo( HanziToPinyin.getPingYin(num[j + 1]))<0) j = j + 1;// 找出较大者把较大者给num[i] if (HanziToPinyin.getPingYin(num[i]).compareTo(HanziToPinyin.getPingYin(num[j]))>0) break; //--代码跟随 MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{7,8,9}); String x = num[i]; num[i] = num[j]; num[j] = x; SortUtils.changeUnit(units, j-1, i-1); i = j; } SortUtils.repaintUnit(0); }
第 24 页 共 80 页
陕西理工学院毕业设计
4.8基数排序(MSD)
将字符串数组封装为RadixData,同时利用GUI在ContentPanel(中间JPanel)中绘制数据。将SortUtils.copyRadixUnit()切入到排序代码中,完成单元到临时数组的拷贝动画。AccessoryPanel(右边JPanel)中加入JList,通过JList.setSelectedIndices(int[] i)完成代码跟随。将MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{});该方法切入到排序代码完成排序算法每一步实现效果。实现代码如下:
public void msdToShow(String[] data, int power, int isGo,int index) { ......初始化显示数据 int pos = 0; if (power < 0) return; for (int i = 0; i < data.length; i++) { if (data[i] == null || \ break; String pyData = HanziToPinyin.getPingYin(data[i]); if (power < pyData.length()) { pos = (int) pyData.charAt(power) - 97; } else { pos = 0; } //--代码跟随 MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{15}); SortUtils.copyRadixUnit(radixData, i, pos, order[pos], 0); temp[pos][order[pos]] = data[i]; radixData.setTempUnits(DataUtil.getUnitRadixTemp(temp)); SortUtils.repaintUnit(30); order[pos]++; //--代码跟随 MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{16}); radixData.setOrder(DataUtil.getUnitOrder(order)); SortUtils.repaintUnit(30); } ++power; if (isGo <= 0) { msdToShowForLast(data, temp,index); } }
第 25 页 共 80 页
陕西理工学院毕业设计
5测试
在Java虚拟机中运行该系统,得到系统运行界面,导入排序数据(周生、丁模、吕学、许要、其勉、龚学、尹要、贺勉、郝生、姜模),点击直接插入排序按钮,并点击开始按钮,进入直接插入排序过程界面,排序过程界面如图5.1所示,运行结果界面如图5.2所示。
图5.1 直接插入排序过程界面
图5.2 直接排序运行结果
点击折半插入排序按钮,并点击开始按钮,进入折半直接插入排序过程界面如图5.3所示,运行结果界面如图5.4所示。
第 26 页 共 80 页
陕西理工学院毕业设计
图5.3 折半插入排序运行状态
图5.4 折半插入排序运行结果
点击快速排序按钮,并点击开始按钮,进入快速排序过程界面如图5.5所示,运行结果界面如图5.6所示。
第 27 页 共 80 页