java常见算法 冒泡排序,选择排序,插入排序,快速排序

import java.util.Arrays;

public class Sort2 {
    public static void main(String args[]) {
        int[] array = new int[] { 3, 5, 1, 2, 7, 6, 4, 8, 7 };
//        selectSort(array);
        quickSort(array, 0, array.length - 1);
//        bubbleSort(array);
//        insertSort(array);
        System.out.println(Arrays.toString(array));
    }

    /**
     * 冒泡排序,升序 两两比较,较大的数往后面冒
     * 
     * @param array
     */
    public static void bubbleSort(int[] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length - i - 1; j++) {
                // 大数往后冒
                if (array[j] > array[j + 1]) {
                    int temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
            }
        }
    }

    /**
     * 选择排序,升序 寻找最小值然后交换
     * 
     * @param array
     */
    public static void selectSort(int[] array) {
        for (int i = 0; i < array.length; i++) {
            int min = i;
            for (int j = i + 1; j < array.length; j++) {
                if (array[min] > array[j]) {
                    min = j;
                }
            }
            if (min != i) {
                int temp = array[i];
                array[i] = array[min];
                array[min] = temp;
            }
        }
    }

    /**
     * 插入排序 将数组分为[0,index-1]的有序数列和[index,array.length]无序数列两部分 
     * 提取array[index]的值记为temp,准备插入左侧有序数列
     * 之后从有序数列右侧开始遍历,全体向右偏移一位,直至找到合适的插入点
     * 参考https://blog.csdn.net/qq_42857603/article/details/81605124
     * 
     * @param array
     */
    public static void insertSort(int[] array) {
        for (int index = 1; index < array.length; index++) {
            //temp为要插入到左侧的数
            int temp = array[index];
            int leftindex = index - 1;
            // 大数往后移动
            while (leftindex >= 0 && array[leftindex] > temp) {
                array[leftindex + 1] = array[leftindex];
                leftindex--;
            }
            array[leftindex + 1] = temp;
        }
    }
    /**
     * 快速排序
     * 参考https://blog.csdn.net/shujuelin/article/details/82423852
     * 
     * @param array
     * @param low
     * @param high
     */
    public static void quickSort(int[] array, int low, int high) {
        if (low > high) {
            return;
        }
        int i = low;
        int j = high;
        int base = array[low];
        while (i < j) {
            // 先看右边,找到第一个小于基准点的数
            while (i < j && array[j] >= base) {
                j--;
            }
            // 再看左边,找一个大于基准点的数
            while (i < j && array[i] <= base) {
                i++;
            }
            if (i < j) {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;

            }
        }
        // 最后将基准位与i和j相等位置的数字交换
        array[low] = array[i];
        array[i] = base;
        //递归调用排序左侧
        quickSort(array, low, i - 1);
        //递归调用排序右侧
        quickSort(array, i + 1, high);
    }

}

 

 

你可能感兴趣的:(java常见算法 冒泡排序,选择排序,插入排序,快速排序)