图解插入排序

插入排序,见名知意思,就是将元素插入到它应该待的位置,来实现排序。什么叫应该待的位置呢?通俗点说,插入排序的原理是将一个元素插入到有序数组,不断地扩展有序数组的长度实现整个数组的有序。

 

 

插入排序进行的移位操作有两个:

  1、是将要插入元素清除,其他与有序数组无关元素后移

  2、是在找到了插入位置之后的插入动作涉及的移位

寻找插入位置的时候要注意:

  在有序数组中从上往下检索,一旦找到匹配的一定要终止寻找,因为有序数组是逆序的,上面位置符合判断条件则下一个位置一定也符合判断条件,会导致位置定位错误。

 

示例代码:

        int[] arr = new int[]{3, 5, 11, 2, 8};
        for (int i=0; i< arr.length-1; i++){
            int insertEle = arr[arr.length-1];
            int sortArrLimit = i;
            int willSortArrLimit = i+1;
            int tempPosition = willSortArrLimit;

            //其他元素后移
            for(int j=arr.length-1; j> willSortArrLimit; j--){
                arr[j] = arr[j-1];
            }

            //寻找插入位置
            for (int j= 0; j<=sortArrLimit; j++ ){
                if (insertEle > arr[j]){
                    tempPosition = j;
                    break;//找到位置之后要中断掉,有序数组是个逆序的数组
                }
            }

            //执行插入动作
            for (int j=willSortArrLimit; j>tempPosition; j--){
                arr[j] = arr[j-1];
            }
            arr[tempPosition] = insertEle;
        }
        System.out.println(Arrays.toString(arr));

 

posted @ 2020-01-31 11:58  guodaxia  阅读(675)  评论(0编辑  收藏  举报