美文网首页
常见排序算法(二) 插入排序

常见排序算法(二) 插入排序

作者: 资深养猪大户 | 来源:发表于2018-10-26 11:25 被阅读0次

1、直接插入排序

  • 算法思想
    若下个升序排序,将数组中的元素依次与前面的元素(前面的元素已是排序好的状态)进行比较,找到合适的位置插入,后面的元素则后移一位。
  • 代码实现
public class InsertSort
{
    public static void insertSort(int[] arr)
    {
        for(int i = 1; i < arr.length; i++)
        {
            int temp = arr[i];
            for(int j = i; j >= 0; j--)
            {
               //往前比较,如果比i位大就后移一位
                if(j > 0 && arr[j-1] > temp)
                {
                    arr[j] = arr[j-1];
                }
                else
                {
                    arr[j] = temp;
                    break;
                }
            }
        }
    }
    public static void main(String[] args)
    {
        int[] array = new int[]{22,44,77,88,189,22,22,35,666,33,99,66};
        insertSort(array);
        for(int i = 0; i<array.length;i++)
        {
            System.out.println(array[i]);
        }
    }
}
  • 复杂度
    时间复杂度:初始有序比较n-1次时间复杂度最好O(n),最坏O(n^2)
  • 稳定性
    稳定
  • 使用场景
    对于数据量比较小且基本有序的状况效率比较高

2、希尔排序

  • 算法思想
    递减增量排序算法
    将数组分割成若干个子序列分别进行直接插入排序,使得整个数组基本有序,再对全体记录进行依次直接插入排序。
    以步长分组排序
  • 代码实现
public class ShellSort
{
    public static void shellSort(int[] arr) {
        int gap = arr.length/2;
        for (; gap > 0; gap /= 2) {
            for (int i = 0; i + gap < arr.length; i++)
                for (int j = i; j + gap < arr.length; j+=gap) {
                    if (arr[j] > arr[j + gap]) {
                        int temp = arr[j];
                        arr[j] = arr[j + gap];
                        arr[j + gap] = temp;
                    }
                }
            }
        }
    }
    public static void main(String[] args)
    {
        int[] array = new int[]{22,44,77,88,189,22,22,35,666,33,99,66};
        shellSort(array);
        for(int i = 0; i<array.length;i++)
        {
            System.out.println(array[i]);
        }
    }
}
  • 复杂度
    时间复杂度:
    最好时间复杂度:正序,只比较不交换,O(n)
    最坏时间复杂度:初始步长大,分组多但每组元素少,所以速度快;后续排序变慢。最坏时间复杂度和步长序列的选择有关。代码实现中的方式最坏时间复杂度为 O(n^2) 。其他的步长序列后续补充。
  • 稳定性
    多次排序会导致相等的元素位置交换,不稳定
  • 使用场景
    数据量非常大没有快速排序快,但是数据规模中等表现良好。

相关文章

  • 干货分享:白话12种排序算法

    常见的排序算法: 快速排序、堆排序、归并排序、选择排序 插入排序、二分插入排序 冒泡排序、鸡尾酒排序 桶排序、计数...

  • 数据结构与算法(七),排序

    这节总结一下常见的排序算法。 目录: 1、插入排序 1.1、直接插入排序 1.2、二分插入排序 2、选择排序 3、...

  • LeetCode大全

    1.常见排序算法: 常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、...

  • 插入排序算法实现

    排序算法是最常见,最基础的算法,作者文集中记录了两种排序算法(插入排序,归并排序) 插入排序算法实现很简单直接,附...

  • 排序算法

    常见的排序算法 常见的排序算法有:插入、希尔、选择、冒泡、归并、快速、堆排序。。。 插入排序 算法步骤一、从数组的...

  • Python知识点:常见算法的python实现

    提到排序算法,常见的有如下几种:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序;查找算法最常见...

  • Chapter 2 Foundation of Algorith

    Chapter 2 插入排序 线性查找 选择算法 归并排序算法 二分查找算法 冒泡排序 插入排序 循环不...

  • 排序一:冒泡、插入、选择

    文章结构 概述 冒泡排序 插入排序 选择排序 1. 概述 常见的排序算法有:冒泡排序、插入排序、选择排序、归并排序...

  • Python排序算法有哪几种?

    python排序算法有哪些?python中常见的排序算法有:插入排序、选择排序、冒泡排序、快速排序、归并排序、希尔...

  • 开发者应该掌握的几种排序算法

    该篇文章主要介绍了算法基础以及几种常见的排序算法:选择排序、插入排序、冒泡排序、快速排序、堆排序。 一、算法基础 ...

网友评论

      本文标题:常见排序算法(二) 插入排序

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