#排序专题:插入排序 @FDDLC

原理图:

插入排序

 

 

Java代码:

class Solution {
    public void insertingSort(int[] nums){ //升序
        //0到index-1号元素都已经有序,要将index号元素插到它前面的某个位置,以便再次有序
        for(int index=1;index<nums.length;index++){
            //向左(index-1到0)或向右(0到index-1)比较都行,但向左更好。
            //假设index=8,即0到7号都已有序。如果8号应该插到4号和5号之间,则5、6、7号都要右移一位,8号到5号位去
            for(int sortedIndex=index-1;sortedIndex>=0;sortedIndex--){
                if(nums[sortedIndex]>nums[index]) { //交换
                    int temp = nums[sortedIndex];
                    nums[sortedIndex] = nums[index];
                    nums[index] = temp;
                } else break; //else break可有可无,加上更好!
            }
        }
    }

    public static void main(String[] args) {
        int[] nums={2,1,3,2,5,4};
        System.out.println("排序前");
        for(int i:nums) System.out.print(i+" ");
        new Solution().insertingSort(nums);
        System.out.println("\n排序后");
        for(int i:nums) System.out.print(i+" ");

    }
}

总结:

1、每一轮插入可能有多次交换操作;

2、当轮到 i 号元素时(即index=i),前面的0到 i-1 号元素已经有序。于是 i 号元素往前看,遇到比它大的,就交换;遇到小于等于它的,则在其后定居!

 

 

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页