三种简单的排序(冒泡、选择、插入)

冒泡排序

/**
     * 对数组进行冒泡排序
     * 1.2 对算法进行优化,如果某一次排序中,没有出先交换,
     *      那么说明已经是有序的
     * @param arr
     */
    public static void bubbleSort(int[] arr){
        int temp = 0;
        //标志是否有交换 true/有
        boolean flag = false;
        for (int j = 0; j <arr.length-1 ; j++) {
            //第j趟排序 进行n-1-j次排序
            for (int i = 0; i < arr.length-1-j; i++) {
                //如果前一个数大于后一个,则进行交换
                if (arr[i] > arr[i+1]){
                    //发生了交换
                    flag = true;

                    temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
            //已经有序
            if (!flag){
                break;
            }
            //否则要重置flag ,不然不会执行break;
            else {
                flag = false;
            }
        }
    }

选择排序

/**
     * 选择排序
     * @param arr
     */
    public static void selectSort(int[] arr){

        for (int j = 0; j < arr.length-1; j++) {
            //计算第i次排序
            //假定当前的数最小
            int min = arr[j];
            int minIndex = j;
            //和后面的数依次进行比较
            for (int i = j; i < arr.length; i++) {
                //发现比假定的最小数还要小
                if (arr[i] < min){
                    //就重新确定最小数和下标
                    min = arr[i];
                    minIndex = i;
                }
            }
            //将第一个数放在交换的位置arr[minIndex]
            //将这一轮的最小值放在arr[0]
            //实际上就是交换
            if (minIndex != j){
                arr[minIndex] = arr[j];
                arr[j] = min;
            }
        }

    }

插入排序

/**
     * 插入排序
     * @param arr
     */
    public static void insertSort(int[] arr){
        for (int i = 1; i < arr.length; i++) {
            //第二轮排序
            //待插入的值
            int insertVal = arr[i];
            //待插入的下标
            int insertIndex = i-1;
            //寻扎插入的位置
            while (insertIndex >= 0 && insertVal < arr[insertIndex]){
                arr[insertIndex+1] = arr[insertIndex];
                insertIndex--;
            }

            if (insertIndex+1 != i){
                arr[insertIndex+1] = insertVal;
            }
        }
    }

你可能感兴趣的:(数据结构与算法,排序)