如何做交互式网站,长安建网站公司,蚂蚁加速器,网站建设技术可行性1 packagetest;23 importjava.nio.channels.SelectableChannel;45 importcom.itqf.bean.User;67 public classcTypeCode {89 /********************************************希尔排序和插入排序*******推荐严慧敏的那本数据结构#xff0c;思想步骤我都加入到算法里面了#…1 packagetest;23 importjava.nio.channels.SelectableChannel;45 importcom.itqf.bean.User;67 public classcTypeCode {89 /********************************************希尔排序和插入排序*******推荐严慧敏的那本数据结构思想步骤我都加入到算法里面了很精简了***********************************************************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 }3132 }3334 /**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 }6768 /********************快速排序分割线***********************************************************************************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;107108 }109110 /**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 }126127 /**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 }143144 }145146 /****************************************************大顶堆排序算法************************************147 * 堆排序148 *parama149 *paramb150 *return151 */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 }179180 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 }195196 /***********************************************************************归并排序算法分割线*********************************************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 }230231 }232233 /**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 }249250251 /**************************************************************************************简单哈希算法分割线*************************************************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;272273 }274275 /**276 * 计算hash值277 *278 *paramvalue279 * 关键字280 *paramlength281 * hash表长度282 *return283 */284 public int getHashCode(int value, inthashLength) {285286 return value %hashLength;287288 }289290 public static voidmain(String[] args) {291292 //TODO Auto-generated method stub293294 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);300301302 //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 }