排序算法系列再次练习总结之:插入

public class StraightSort {
    /**
     * 插入排序:
     * 思路是从右侧的未排序区域内取出一个数据,然后将它插入到已经排序区域内合适的位置上。
     * 例如:5 3 4 7 2 8 6 9 1
     * 首先假设最左边的5已经完成排序,所以此时只有5是已归位的数字
     * 然后从待排数字中取出最左边的数字3,将它与5进行比较,如果左边的数字更大,就交换。3和5 交换。这样下去就可以了
     */
    private static void insertSort(int[] arr){

        //外层循环确定待比较数值
        for (int i=1;i<arr.length;i++) {  //必须i=1,因为开始从第二个数与第一个数进行比较
            int temp = arr[i];  //待比较数值 设置数组中的第2个元素为第一次循环要插入的数据
            int j = i - 1;
            //内层循环为待比较数值确定其最终位置
            for (;j>=0 && arr[j]>temp;j--) {  //待比较数值比前一位置小,应插往前插一位
                //将大于temp的值整体后移一个单位
                arr[j+1] = arr[j];
            }
            arr[j+1] = temp; //待比较数值比前一位置大,最终位置无误
        }
    }

    public static void main(String[] args) {

        int arr[] = {11,34,66,88,67,50,43,87,99};
        System.out.println("数组排序前顺序:");
        for(int n : arr){
            System.out.print(n+" ");
        }

        //直接插入排序
        insertSort(arr);

        System.out.println("\n数组排序后顺序:");
        for(int n : arr){
            System.out.print(n+" ");
        }

    }
}




截图:

猜你喜欢

转载自blog.csdn.net/qq_35207086/article/details/112969652