QuickSort & MergeSort

import java.util.Arrays;

public class QuickSort {
    public static void main(String[] args) {
        final int[] array = new int[]{5, 9, 7, 2, 0, 8, 1};
        sort(array, 0, array.length);
        System.out.println(Arrays.toString(array));
    }

    static void sort(int[] array, int from, int to/*不包含*/) {
        if (to - from <= 1) return;
        final int p = from + (int) ((to - from - 1) * Math.random());
        final int guard = array[p];
        swap(array, to - 1, p);
        int k = from;
        for (int i = from; i < to - 1; i++) {
            if (array[i] < guard) {  // 由“<=”改为了“<”,待测试。03/21/2019
                swap(array, i, k++);
            }
        }
        swap(array, to - 1, k++);
        System.out.println(Arrays.toString(array) + "(" + from + "," + to + ")" + "[" + k + "]" + guard);
        if (to - from <= 2) return;
        sort(array, from, k);
        sort(array, k, to);
    }

    static void swap(int[] array, int i, int j) {
        if (i != j) {
            final int temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
}
object MergeSort extends App {
  println {
    msort((x: Int, y: Int) => x < y) {
      List(5, 9, 7, 2, 0, 8, 1)
    } mkString ", "
  }


  def msort[T](less: (T, T) => Boolean)(xs: List[T]): List[T] = {

    def merge(xs: List[T], ys: List[T]): List[T] =
      (xs, ys) match {
        case (Nil, _) => ys
        case (_, Nil) => xs
        case (x :: xs1, y :: ys1) =>
          if (less(x, y)) x :: merge(xs1, ys)
          else y :: merge(xs, ys1)
      }

    val n = xs.length / 2;
    if (n == 0) xs
    else {
      val (ys, zs) = xs splitAt n
      merge(msort(less)(ys), msort(less)(zs))
    }
  }
}

转载于:https://my.oschina.net/weichou/blog/838704

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值