算法(2.5 应用)

来源:互联网 发布:王牌特工特工学院淘宝 编辑:程序博客网 时间:2024/06/05 14:33

这一章讲排序中的基本应用



找到一组数中的第K小元素  (就是找到排序中的索引)

利用快速排序来完成

public static Integer select(Integer[] a, int k){if (k > a.length-1){return null;}int lo = 0;int hi = a.length - 1;while (hi > lo){int j = partition(a, lo, hi);if (j == k){System.out.println(a[j]);return a[j];}else if (j > k){hi = j - 1;}else{lo = j + 1;}}System.out.println(a[k]);return a[k];}private static int partition(Comparable[] a, int lo, int hi){//将数组切分为a[lo..i-1], a[i], a[i+1..hi]int i = lo, j = hi + 1;  //左右扫描指针Comparable v = a[lo]; //切分元素while (true){//扫描左右,检查扫描是否结束并交换元素while (less(a[++i], v)){if (i == hi){break;}}while (less(v, a[--j])){if (j == lo){break;}}if (i >= j){break;}exch(a, i, j);}exch(a, lo, j);//将v = a[j]放入正确的位置return j;//a[lo..j-1] <= a[j] <= a[j+1..hi] 达成}private static boolean less(Comparable v, Comparable w){return v.compareTo(w) < 0;}private static void exch(Comparable[] a, int i, int j){Comparable t = a[i];a[i] = a[j];a[j] = t;}


原创粉丝点击