插入排序算法

一、插入排序的种类插入排序算法_第1张图片

1、直接插入排序
每一次把一个待排序的记录,按照值的大小,插入到有序数组的合适位置。相当于把a[n]分割,先排序数组 a[0] ~ a[1],再 a[0] ~ a[2],直到 a[0] ~ a[n] 全部排序完成。

  • 第一个元素之前没有值,认为已经排序
  • 取下一个待排序元素,下标为 i,向前进行比较
  • 如果待排序元素比待比较元素小,则交换位置
  • 重复步骤3直到有一个元素等于或者小于待排序元素,此次内循环结束,a[0] ~ a[i]排序完成
  • 重复步骤2~4,直到最后一个元素

2、时间复杂度
认为第一元素已经排好序,从第二个元素开始向前比较,计算需要比较的次数:
在这里插入图片描述
3、图示
插入排序算法_第2张图片
4、代码

 public static void main(String[] args) {
      
        List<Integer> list = Lists.newArrayList(6,2,7,4,10,7,5);
        Integer[] array = list.toArray(new Integer[list.size()]);
        // 从第二个元素开始到最后一个元素
        for(int i =1;i< array.length;i++){
            // 向前遍历
            for(int j = i; j > 0 ;j --){
                if(array[j] < array[j -1]){
                    int temp = array[j];
                    array[j] = array[j-1];
                    array[j-1] = temp;

                }else {
                    break;
                }
            }

        }

        System.out.println(JSON.toJSONString(array));
    }

5、使用哨兵
插入排序算法_第3张图片
代码实现:
插入排序算法_第4张图片

你可能感兴趣的:(数据结构与算法,排序算法)