首页 > 其他分享 >插入排序之直接插入排序

插入排序之直接插入排序

时间:2023-06-09 22:00:28浏览次数:29  
标签:有序 temp nums 插入排序 元素 数组 直接

一、直接插入排序

插入排序(英语:Insertion sort)是一种简单直观的排序算法。它的工作原理为将待排列元素划分为「已排序」和「未排序」两部分,每次从「未排序的」元素中选择一个插入到「已排序的」元素中的正确位置。

一个与插入排序相同的操作是打扑克牌时,从牌桌上抓一张牌,按牌面大小插到手牌后,再抓下一张

 

稳定性:直接插入排序是一种稳定的排序算法。

时间复杂度:插入排序的最优时间复杂度为O(n),在数列几乎有序时效率很高。

      插入排序的最坏时间复杂度和平均时间复杂度都为O(n2)。

二、思想及代码实现

 

package algo;

import java.util.Arrays;

/**
 * 直接插入排序是插入排序的一种,也是最为简单的一种插入排序。
 * 大致思路是:
 * 初始将数组中的第一个元素nums[0]看成一个有序数组,随后不断的将无序数组即下标为[1, nums.length - 1]的元素插入到有序数组中。
 * 
 * 举例说明:假设现有一待排序的数组{3, 6, 5, 8, 0, 2, 1},
 * 那么第一步就是将数组中的第一个元素看成一个有序数组即{3},随后遍历无序数组的元素往有序数组中插入。
 * 对于第二个元素6来讲,它是大于3的,则不需要操作,此时子数组就变成了{3,6};
 * 对于第三个元素5来讲,它是小于它前面的元素6的,那么下面要做的就是在子数组{3,6}的合适位置将5插进去,
 * 这里记待插入元素的值为temp = 5(之所以需要进行记录,是因为后续随着有序数组的比较和后移,会将数组中的5覆盖掉),
 * 之后对有序数组进行倒序的遍历并分别和待插入元素temp比较:
 * 若有序数组中的某个元素大于temp,则直接将该元素后移一位,覆盖掉其后面的一个元素,比如这里就是 6 把 5 给覆盖了,这里是一个不断循环的操作,
 * 直至达到j < 0 || temp > nums[j]时停止,并将temp插入到nums[j + 1]的位置。
 * 这里有两种情况,第一种情况是当遇到j < 0时表示有序数组中不存在比5小的,那么5就会作为有序数组中的第一个元素
 * 第二种情况则是,temp > nums[j],这里表达的意思是随着对有序数组的遍历,找到了一个nums[j] < temp的元素,那么随后将temp插入到nums[j + 1]的位置即可。
 * 
 */

public class insertSortSolution {
    public static void insertSort(int[] nums){
        for(int i = 1; i < nums.length; i++){ // 初始将第一个元素,也就是索引为0的元素看成一个有序数组
            if(nums[i] < nums[i - 1]){ // 若待插入的元素比有序数组中的元素小的话,表明该元素待插入到有序数组中
                int temp = nums[i]; // 将该值记录(因为后续要进行覆盖操作),并准备插入到前面的有序数组中
                int j = i - 1;
                while(j >= 0 && temp < nums[j]){ // 从有序数组的最后一个元素开始逐个和待插入元素比较
                    nums[j+1] = nums[j]; // 覆盖操作
                    j--;
                }
                nums[j + 1] = temp; // 将待插入元素放入到合适的位置
            }
        }
    }

    public static void main(String[] args) {
        int[] arr = new int[]{3, 2, 1, 0, 5, 6, 7, 4};
        insertSort(arr);
        System.out.println(Arrays.toString(arr));
    }
}

 

标签:有序,temp,nums,插入排序,元素,数组,直接
From: https://www.cnblogs.com/fxy0715/p/17470319.html

相关文章

  • Python中直接查看对象值和使用print()输出的区别
    直接用代码来描述这个问题的现象:>>>x=r'C:\windows\notepad.exe'>>>x'C:\\windows\\notepad.exe'>>>print(x)C:\windows\notepad.exe>>>x='''Tomsaid,"Let'sgo."'......
  • 原神:直接抽十连真的比单抽好吗?颠覆你认知的抽卡规律
    原神抽卡每一抽单独计算,所以十连抽理论和单抽没有区别。官方的实际抽卡公式只提到了up池前73抽每抽0.6%概率。从74开始,每抽在上-抽基础上增加6%概率,第90抽必定100%概率。所以很多人80左右基本就可以抽到了。如果恰巧在此十连,可能按顺序是有几抽是五星之后抽取的。如果你是个精打......
  • Cache - 直接映射缓存
    参考https://zhuanlan.zhihu.com/p/1022934371.Cachelinecachesize:cache可以缓存最大数据的大小。将cache均分相等的块,每一块称为cacheline,现在的硬件设计中,一般cacheline的大小为4-128字节,cacheline做的太小会导致tag资源占用过大。cacheline是cache和主存......
  • Quartz + SpringBoot 实现定时任务(多任务,多执行时间)代码模板(直接CV即可)
    一,什么是Quartzquartz是一款开源且丰富特性的Java任务调度库,用于实现任务调度和定时任务。它支持各种任务类型和灵活的配置选项,具备作业持久化、集群和分布式调度、错误处理和重试机制等功能。Quartz被广泛应用于各种应用程序中,提供可靠和灵活的任务调度解决方案。二,核心概念......
  • 在MOSS中直接嵌入ASP.NET Page zt
    在MOSSDocumentLibrary中的Page,有BasicPage和WebPartPage两种,前者更多的体现WCM特性,后者则更侧重体现Portal特性。不管是BasicPage还是WebPartPage,都是直接和MOSS本身结合非常密切,都直接采用Site中的MasterPage。如果我们想把一个普通的ASP.NETPage也加到MOSS站点里运行,......
  • 检测到包降级: System.Diagnostics.Debug 从 4.3.0 降级到 4.0.11。直接从项目引用包
    .net 项目在发版的时候报包的版本不一致严重性代码说明项目文件行禁止显示状态错误错误形式的警告:检测到包降级:System.Diagnostics.Debug从4.3.0降级到4.0.11。直接从项目引用包以选择不同版本。ProjectName->Microsoft.AspNetCore.Mvc.Core2.2.5->Micros......
  • wsexplorer——windows下的抓包工具 可以直接抓进程对应的网络流量
    软件标签:WSExplorer抓包工具  wsexplorer1.5版本是一款非常实用的抓包工具,用户能够直接通过软件直接获取更多的数据,同时还设计了选择功能,只需挑选自己需要的数据,需要的用户快来绿色资源网下载吧!wsexplorer抓包工具简介:wsexplorer是最好用的抓包工具,1.5版本添加新功能,分离二进......
  • SparkUI中的Peak Pool Memory Direct / Mapped (直接缓冲池和映射缓冲池)
      PeakPoolMemoryDirect/Mapped --直接缓冲池和映射缓冲池峰值内存##什么是直接缓冲池和映射缓冲池?在Java中,有两种类型的缓冲池:直接缓冲池和映射缓冲池。直接缓冲池1)从堆外内存分配,不受JVM管理2)占用内存较多3)相比从JVM复制数据到本地,性能更高 映射缓冲池1)将文......
  • CodeGeeX 2.0版本重大升级:通过聊天对话的方式直接操作代码
    CodeGeeX2.0版本正式上线!从命名上看这是一次大版本的升级。上个月,CodeGeeX在VSCode和JetBrainsIDEs的插件中,加入了智能问答(AskCodeGeeX)功能,让用户可以在IDE中通过问答对话的方式解决技术问题。本周,这一功能全新升级!在CodeGeeX2.0正式版中,将问答与IDE编程环境深度融合,可以通过......
  • 一文理清排序算法中的直接插入、快排和希尔排序的区别
    前言在上一篇文章中,给大家介绍了冒泡排序和选择排序,这两种算法都是排序算法。实际上排序算法还有插入、希尔、快速排序等,接下来我们就来学习一下这几种排序算法。全文大约【5400】字,不说废话,只讲可以让你学到技术、明白原理的纯干货!本文带有丰富的案例及配图视频,让你更好地理......