Java实现排序算法

九路 发表时间: 2020-09-09 09:41 阅读:66 收藏:0
  //冒泡排序
    public static void bubbleSort(int[] data) {
        int n = data.length;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                if (data[i] < data[j]) {
                    Utils.swap(data, i, j);
                }
            }
        }
    }
    //选择排序(选择一个最小的)
    public static void selectSort(int[] data) {
        int n = data.length;
        for (int i = 0; i < n; i++) {
            int min = i;
            for (int j = i + 1; j < n; j++) {
                if (data[j] < data[min]) {
                    min = j;
                }
            }

            Utils.swap(data, i, min);
        }
    }
   //插入排序
    public static void insertSort(int[] data) {
        int n = data.length;
        for (int i = 1; i < n; i++) {
            for (int j = i; j > 0; j--) {
                if (data[j] < data[j - 1]) {
                    Utils.swap(data, j, j - 1);
                }
            }
        }
    }
  //插入排序的改进
    public static void insertSort2(int[] data) {
        int n = data.length;
        for (int i = 1; i < n; i++) {
            int j = i;
            int e = data[j];
            for (; j > 0; j--) {
                if (e < data[j - 1]) {
                    data[j] = data[j - 1];
                } else {
                    break;
                }
            }
            data[j] = e;
        }
    }
//快速排序
  public static void quickSort(int[] data, int l, int r) {
        if (l < r) {
            int k = partition(data, l, r);
            quickSort(data, l, k - 1);
            quickSort(data, k + 1, r);
        }
    }

    private static int partition(int[] data, int l, int r) {
        int e = data[l];
        while (l < r) {
            //从后往前找比e小的数
            while (l < r && data[r] >= e)
                r--;
            Utils.swap(data, r, l);

            //从前往后找比e大的数
            while (l < r && data[l] <= e)
                l++;
            Utils.swap(data, r, l);
        }

        return l;
    }
收藏
评论区
发表评论