Java中8种常见的排序方法(10)

// 2.交换排序:快速排序
    private static int[] quickSort(int[] data, int low, int high) {
        if (low < high) {
            int middle = getMiddle(data, low, high);// 获取中间值
            // 对两端的再次进行排序
            quickSort(data, low, middle - 1);
            quickSort(data, middle + 1, high);

}
        return data;
    }

// 快速排序:获取中间值
    private static int getMiddle(int[] data, int low, int high) {
        // 以第一个元素为基准
        int temp = data[low];
        while (low < high) {
            while (low < high && data[high] > temp) {
                high--;
            }
            data[low] = data[high];
            while (low < high && data[low] < temp) {
                low++;
            }
            data[high] = data[low];
        }
        data[low] = temp;
        return low;
    }

// 2.交换排序:冒泡排序
    private static int[] bubbleSort(int[] data) {
        // 冒泡次数
        for (int i = 0; i < data.length; i++) {
            // 冒泡
            for (int j = 0; j < data.length - i - 1; j++) {
                if (data[j] > data[j + 1]) {
                    int temp = data[j];
                    data[j] = data[j + 1];
                    data[j + 1] = temp;
                }
            }
        }
        return data;
    }

// 1.插入排序:希尔排序
    private static int[] shellSort(int[] data) {
        // 划分组
        for (int r = data.length / 2; r >= 1; r /= 2) {
            // 对每一组进行插入排序
            for (int i = r; i < data.length; i++) {
                int insertData = data[i];// 插入的数据
                int j = i - r;// 临时序号
                while (j >= 0 && data[j] < insertData) {
                    data[j + r] = data[j];
                    j -= r;
                }
                data[j + r] = insertData;
            }
        }
        return data;
    }

// 1.插入排序:直接插入排序
    private static int[] insertSort(int[] data) {
        for (int i = 1; i < data.length; i++) {
            int insertData = data[i]; // 要插入到数组中的数据
            int j = i - 1; // 临时脚标
            while (j >= 0 && insertData < data[j]) {
                data[j + 1] = data[j];// 将原始数据后移
                j--;
            }
            data[j + 1] = insertData; // 将如要插入的数据插入到此处
        }
        return data;
    }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e3c7ef191ec5f9cba3335d3d026fea11.html