我是靠谱客的博主 爱听歌裙子,最近开发中收集的这篇文章主要介绍算法与数据结构--插入排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

1、插入排序的原理

2、过程分析

3、参考代码


1、插入排序的原理

  • 将数组分为两部分, 将后边部分的第一个逐一与前部分每一个元素比较,在合理位置插入
  • 插入排序算法效率要高于选择排序和冒泡排序

       插入排序丼例:{8 , 2 , 3 , 7 , 1}的排序过程如下所示:

       第1步,假设第一个元素是已排序的                                                     {8|2,3,7,1}

       第2步,用2和"|"之前的所有元素比较,并插入                                     {8|2,3,7,1}

                    取出2(temp=2)

                    temp和8比,比8小,将2的位置赋值为大数(array[1]=8)    {8|8,3,7,1}

                    因为已到边界,直接赋值(array[0]=2)                                 {2,8|3,7,1}

                    2和8排序完成

       第3步,用3和"|"之前的所有元素比较,并插入                                     {2,8|3,7,1}

                    取出3(temp=3)

                    temp和8比,比8小,3的位置赋值给大数(array[2]=8)        {2,8|8,7,1}

                    temp和2比,比2大,插入2后面 (array[1]=3)                     {2,3,8|7,1}

                    3、2、8排序完成

       第4步,用7和"|"之前的所以元素比较,并插入                                     {2,3,8|7,1}

                    取出7(temp=7)

                    temp和8比,比8小,7的位置赋值给大数(array[3]=8)        {2,3,8|8,1}

                    temp和3比,比3大,插入3后面(array[2]=7)                      {2,3,7,8|1}

                    7、2、3、8排序完成

       第5步,用1和"|"之前的所以元素比较,幵插入                                     {2,3,7,8|1}

                    取出1(temp=1)

                    temp和8比,比8小,1的位置赋值给大数8                              {2,3,7,8|8}

                    temp和7比,比7小,8的位置赋值给大数7                              {2,3,7,7|8}

                    temp和3比,比3小,7的位置赋值给大数3                              {2,3,3,7|8}

                    temp和2比,比2小,3的位置赋值给大数2                              {2,2,3,7|8}

                    到边界,赋值(array[0]=1)                                                   {1,2,3,7,8|}

                    1、2、3、7、8排序完成

2、过程分析

  • temp 代表取出待插入的元素
  • i 代表后组待插入元素的位置
  • j 代表前组每个元素的位置
arrayitempjarray[j]temp < array[j][j]交换[j + 1]temp插入[j+1]
1
{8|2,3,7,1}[1]2[0]8TRUE8->[1]2->[0]
{2,8|3,7,1}
2
{2,8|3,7,1}[2]3[1]8TRUE8->[2]3->[1]
{2,3|8,7,1}[2]3[0]2FALSE----
{2,3,8|7,1}
3
{2,3,8|7,1}[3]7[2]8TRUE8->[3]3->[2]
{2,3,7|8,1}[3]7[1]3FALSE----
{2,3,7,8|1}
4
{2,3,7,8|1}[4]1[3]8TRUE8->[4]1->[3]
{2,3,7,1|8}[4]1[2]7TRUE7->[3]1->[2]
{2,3,1,7|8}[4]1[1]3TRUE3->[2]1->[1]
{2,1,3,7|8}[4]1[0]2TRUE2->[1]1->[0]
{1,2,3,7|8}
结果
{1,2,3,7,8}
  • i 的取值范围是: i=1 ~ <array.length          i++
  • j 的取值范围是: j= i-1 ~ >=0                  j--
  • 伪代码如下:
    temp = [i]; 
    if(temp<[j]){ 
        [j]->[j+1] //移动 
    }else{ 
        break j; 
    } 
    temp->[j+1]; //插入

3、参考代码

    public static void main(String[] args) {
        int[] array = {8, 2, 3, 7, 1};
        System.out.println(Arrays.toString(insertSort(array)));
    }

    private static int[] insertSort(int[] array) {
        int i, j, temp;
        for (i = 1; i < array.length; i++) {
            temp = array[i];
            for (j = i - 1; j >= 0; j--) {
                if (temp < array[j]) {
                    array[j + 1] = array[j];
                } else {
                    break;
                }
            }
            array[j + 1] = temp;
        }
        return array;
    }

 

最后

以上就是爱听歌裙子为你收集整理的算法与数据结构--插入排序的全部内容,希望文章能够帮你解决算法与数据结构--插入排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(39)

评论列表共有 0 条评论

立即
投稿
返回
顶部