插入排序(Insertion Sort)

思路:

  • 将数组分为两个区域:已排序、未排序。
  • 初始已排序区域只第一个元素
  • 取未排序的区域的元素,在已排序的区域找到合适的位置插入
  • 保证已排序区域的数据一直有序
  • 重复这个过程,直到未排序区域为空

步骤:

  • 从数组第二个数开始,往后逐个取数,跟前面的数进行比较
  • 当所取的数,比前面的数大,停止比较,取一下个进行比较
  • 当所取的数,比前面的数小,把比所取数大的数都往后挪一个,直到所取数大于被比较的数停止,最后把所取数插入到比它小的数的右边

代码:

package constxiong.interview.algorithm;/** * 插入排序 * @author ConstXiong * @date 2020-04-08 09:35:40 */public class InsertionSort {    public static void main(String[] args) {        int [] array = {33, 22, 1, 4, 25, 88, 71, 4};        insertionSort(array);    }        /**     * 插入排序     */    private static void insertionSort(int[] array) {        print(array);        for (int i = 1; i <array.length; i++) {            int j = i - 1;            int value = array[i];            for (; j >= 0; j--) {                if (array[j] > value) {                    array[j+1] = array[j];                } else {                    break;                }            }            array[j+1] = value;            print(array);        }    }        /**     * 打印数组     * @param array     */    private static void print(int[] array) {        for(int i : array) {            System.out.print(i + " ");        }        System.out.println();    }    }

打印:

33 22 1 4 25 88 71 4 22 33 1 4 25 88 71 4 1 22 33 4 25 88 71 4 1 4 22 33 25 88 71 4 1 4 22 25 33 88 71 4 1 4 22 25 33 88 71 4 1 4 22 25 33 71 88 4 1 4 4 22 25 33 71 88 

特征:

  • 最好情况时间复杂度:O(n) 。即数组本身有序,如 1,2,3,4,5
  • 最坏情况时间复杂度:O(n2) 。即数组本身完全逆序,如 5,4,3,2,1
  • 平均时间复杂度:O(n2) 。在数组中插入一个数据的平均时间复杂度是 O(n),插入排序执行 n 次往数组中插入操作,所以平均时间复杂度是 O(n2)
  • 空间复杂度是 O(1)。是原地排序
  • 可以保持相等的值原有的前后顺序不变,是稳定排序

给TA打赏
共{{data.count}}人
人已打赏
Java

使用递归输出某个目录下所有子目录和文件

2020-7-31 3:28:20

Java

常见加密算法有哪些?是否对称?

2020-7-31 3:31:40

本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策。若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
⚠️
本站所发布的一切源码、模板、应用等文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权。本站内容适用于DMCA政策
若您的权利被侵害,请与我们联系处理,站长 QQ: 84087680 或 点击右侧 私信:盾给网 反馈,我们将尽快处理。
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索