南江县建设局网站,郑州最新政策,山东省住房和城乡建设厅,烟台企业网站选择#xff0c;插入#xff0c;希尔#xff0c;归并#xff0c;快排#xff08;包括三向快排#xff09;#xff0c;堆排序。 选择#xff1a; 实现原理#xff1a;内外循环#xff0c;选择最小#xff0c;比较。 关键点#xff1a;for#xff08;k i1 ,kN,k… 选择插入希尔归并快排包括三向快排堆排序。 选择 实现原理内外循环选择最小比较。 关键点fork i1 ,kN,k{a[j]a[min],minj} 插入 实现原理往左插入最小 关键点forint j i1, k 0 less(a[j],a[j-1],j-- 希尔 实现原理插入的改进使用递增序列0,1,4,13………………分组插入 关键点 while(hN/3){ h3*h1; forint j i, j h less(a[j],a[j-h],jj-h hh/3; } 归并 实现原理原地自顶向下自底向上递归使整体分成小数组 关键点 mergesort(a,lo,mid); mergesort(a,mid1,hi); merge(a,lo,mid,hi); for (int k lo; k hi; k) if (i mid) a[k] aux[j]; else if (j hi) a[k] aux[i]; else if (SortUtils.less(aux[j], aux[i])) a[k] aux[j]; else a[k] aux[i]; } 快排: 实现原理选择a[lo]第一次从右往左搜比他大从左往右搜比他小,就是a[i]、a[--j]与a[lo]v对比小于 大于三项添加等于 关键点切分partition while (SortUtils.less(a[i], v)) if (i hi) break; while (SortUtils.less(v, a[--j])) if (j lo) break; if (i j) { break; } 堆排序 实现原理优先队列有序化sink 关键点for用来构建堆有序while使用来sink从a[1]使用后面exch和less减一 int N a.length; for (int i N / 2; i 1; i--) { sink(a, i, N); } while (N 1) { exch(a, 1, N--); sink(a, 1, N); } } private static void sink(Comparable[] a, int j, int n) { while (2 * j n) { int h 2 * j; if (h n less(a, h, h 1)) { h; } if (!less(a, j, h)) { break; } exch(a, j, h); j h; } } 转载于:https://www.cnblogs.com/ykong/p/4321266.html