陕西理工学院毕业设计
开始初始化Ni<=m&&j<=tYNsr[i] (6) 堆排序 堆排序算法流程图如图3.7所示。 第 18 页 共 80 页 陕西理工学院毕业设计 开始初始化j (7) 链表插入排序 链表插入排序算法流程图如图3.8所示。 开始初始化Ni< nodes.lengthYq = 0;p=nodes[0].getNext();Nnodes[i]和nodes[p]比较Yi++q = p;p=nodes[p].getNext();nodes[q].setNext(i);nodes[i].setNext(p);结束图3.8 链表插入排序算法流程图 (8) 基数(MSD)排序 基数(MSD)排序算法流程图如图3.9所示。 第 19 页 共 80 页 陕西理工学院毕业设计 开始初始化power < 0YNi < data.lengthYNpower < data[i].length()Ypos = (int)data[i].charAt(power) - 97;pos = 0;temp[pos][order[pos]] = data[i];order[pos]++;++power;Ni < 26i++YNorder[i]>1&&power Ni++i++Nj++N 第 20 页 共 80 页 陕西理工学院毕业设计 4实现 4.1 直接插入排序 将字符串数组封装为Vector public void insertSortToShow(String[] src, int index) { units = DataUtil.getUnitDataForBase(src); MyFactory.getContentPanel().setUnits(units); if (HanziToPinyin.getPingYin(src[index]).compareTo(HanziToPinyin. getPingYin(src[index - 1])) < 0) { src[0] = src[index]; //数组拷贝及代码跟随 src[index] = src[index - 1]; int j = index - 2; for (; HanziToPinyin.getPingYin(src[0]).compareTo(HanziToPinyin. getPingYin(src[j])) < 0; j--) { //找出插入位置 } src[j + 1] = src[0]; //src[0]插入到插入位置 } repaintUnit(500); } 4.2 折半插入排序 将字符串数组封装为Vector public void binaryInsertionSortToShow(String[] src, int index) { units = DataUtil.getUnitDataForBase(src); // 获取显示数据 MyFactory.getContentPanel().setUnits(units); //将src[i]暂存在src[0] src[0] = src[index]; //数组拷贝及代码跟随 int low = 1, high = index - 1; //--代码跟随 MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{2}); // 在src[low...high]中折半查找 SortUtils.refreshUnit(units); // 初始化Units initUnits(units, low, high); // 延迟time后重绘 第 21 页 共 80 页 陕西理工学院毕业设计 repaintUnit(1000); while (low <= high) { ......找出插入位置 } MyFactory.getContentLayoutPanel().repaint(); // 记录后移 for (int j = index - 1; j >= high + 1; j--) { ......记录后移 } ......将src[0]插入到指定位置 } 4.3选择排序 将字符串数组封装为Vector public void selectSortToShow(String[] src, int index) throws SortPlayingException { units = DataUtil.getUnitDataForBase(src); // 获取显示数据 MyFactory.getContentPanel().setUnits(units); //--代码跟随 MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{1}); int j = selectMinKeyToShow(src, index); if (j != index) { String temp = src[index]; src[index] = src[j]; src[j] = temp; //--代码跟随 MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{3,4,5}); changeUnit(units, index, j); } } 4.4快速排序 将字符串数组封装为Vector public int partitionToShow(String[] l,int low,int high) { SortUtils.repaintUnit(500); //用字表的第一个记录轴的记录 l[0] = l[low]; //--代码跟随 MyFactory.getAccessoryPanel().setSelectIndexs(new int[]{1}); SortUtils.copyUnit(units,units.get(low),units.get(0)); //显示内存处理 第 22 页 共 80 页