美文网首页
插入排序

插入排序

作者: junjun2018 | 来源:发表于2018-07-05 16:38 被阅读0次

    类似生活中的整理扑克牌。来一张牌整理一下,如果前一张牌大于后面的牌,则把后面的牌移到前面。由于前面的牌都是依次排好序的,所以后面来的牌只需要大于它的前一张牌,而不用继续往前比较。这样插入排序相比选择排序就有了截断的操作,效率会高于选择排序。尤其在几乎是顺序结构的集合排序时,插入排序效率很高!
    上代码:

    public static void insertSort(int[] arr) {
            //第一个数自身就已经排序,所以索引从1开始
            for (int i = 1; i < arr.length; i++) {
                //跟着索引往前遍历,如果后面的大于前面的,则交换位置即可,否则此次排序完成,进入下一次
                for (int j = i; j > 0; j--) {
                    if (arr[j] < arr[j - 1]) {
                        //交换操作,很费效率,可以采用赋值的方式改善。(此处用的是交换操作)
                        int temp = arr[j];
                        arr[j] = arr[j - 1];
                        arr[j - 1] = temp;
                    } else {
                        break;
                    }
                }
            }
        }
    
    
    public class insertSort {
        public static void main(String[] args) {
            int[] arr = {2, 4, 6, 3};
            int[] result = insertSort(arr);
            for (int i = 0; i < result.length; i++) {
                System.out.println(result[i]);
            }
    
        }
    
        public static int[] insertSort(int[] arr) {
            //从第二个元素开始
            for (int i = 1; i < arr.length; i++) {
                //如果i位置的元素大于它前面的元素,则代表需要排序
                if (arr[i] < arr[i - 1]) {
                    //寻找i位置元素应该插在的位置,从【0,i)范围找,也就是从i的前面元素找应该插入的位置
                    for (int j = 0; j < i; j++) {
                        //如果j位置的元素大于i位置的元素,则代表则j则是应该是i元素排序后所在的位置
                        if (arr[j] > arr[i]) {
                            //找到了位置,将[j,i)的元素往后面移动一位,注意此时需要反向遍历,避免覆盖
                            int temp = arr[i];
                            for (int k = i - 1; k >= j; k--) {
                                //后面的元素用前面的元素覆盖掉,由于已经把i位置的元素保存到temp中,所以覆盖掉i也没事
                                arr[k + 1] = arr[k];
                            }
                            arr[j] = temp;
                            break;
                        }
                    }
                }
            }
    
    
            return arr;
        }
    }
    //结果:
    2
    3
    4
    6
    

    相关文章

      网友评论

          本文标题:插入排序

          本文链接:https://www.haomeiwen.com/subject/lxbpuftx.html