首页 > 编程语言 >数据结构java:插入排序

数据结构java:插入排序

时间:2024-11-18 21:43:18浏览次数:3  
标签:tmp 数据结构 java int 插入排序 gap array 排序

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

插入排序

插入排序

基本思想:

直接插入排序是一种简单的插入排序法,其基本思想是:
把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序中,直到所有的记录插入完为止,得到一个新的有序序列 。实际中我们玩扑克牌时,就用了插入排序的思想。
在这里插入图片描述

直接插入排序

当插入第i(i>=1)个元素时,前面的array[0],array[1],…,array[i-1]已经排好序此时用array[i]的排序码与array[i1],array[i-2],…的排序码顺序进行比较,找到插入位置即将array[i]插入,原来位置上的元素顺序后移
在这里插入图片描述
代码如下:

public class Sort {
    public static void insert(int[] array){


        for (int i = 1; i < array.length; i++) {
            int tmp=array[i];
            int j = i-1;
            for (; j >0 ; j--) {
                if(array[j]>tmp) {
                    array[j + 1] = array[j];
                }
                else {
                    break;//如果j的值小于i的值,直接跳出循环,然后在array[j+1]处打印i的值
                }
            }
            array[j+1]=tmp;
        }
    }

在这里插入图片描述
直接插入排序的特性总结:

  1. 元素集合越接近有序,直接插入排序算法的时间效率越高
  2. 时间复杂度:O(N^2)
  3. 空间复杂度:O(1),它是一种稳定的排序算法1+2+3+4+5+…+n =n*n
    (最坏) n(最好)
  4. 稳定性:稳定

希尔排序( 缩小增量排序 )

希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成多个组,所有距离为的记录分在同一组内,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达
=1时,所有记录在统一组内排好序。

在这里插入图片描述
代码如下:

 public static void shellsort(int[] array){
        int gap=array.length;
        while (gap>1){
            gap=gap/2;
            shell(array,gap);
        }
    }
    public static void shell(int[] array,int gap){
        for (int i = gap; i < array.length; i++) {
            int tmp=array[i];
            int j = i-gap;
            for (; j >0 ; j--) {
                if(array[j]>tmp) {
                    array[j + gap] = array[j];
                }
                else {
                    break;
                }
            }
            array[j+gap]=tmp;
        }
    }

在这里插入图片描述

希尔排序的特性总结:

  1. 希尔排序是对直接插入排序的优化。
  2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很
    快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
  3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排
    序的时间复杂度都不固定:
    在这里插入图片描述
    在这里插入图片描述
  4. 稳定性:不稳定

标签:tmp,数据结构,java,int,插入排序,gap,array,排序
From: https://blog.csdn.net/weixin_74149684/article/details/143867625

相关文章

  • 基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现八
    一、前言介绍:免费学习:猿来入此1.1项目摘要随着人们生活水平的提高,宠物已经成为越来越多家庭的重要成员。然而,宠物的数量增长也带来了一系列问题,如流浪宠物数量的增加、宠物健康管理的缺失以及宠物领养收养信息的不透明等。这些问题不仅影响了宠物的生存状况,也给社会带来了一定......
  • 基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现七
    一、前言介绍:免费学习:猿来入此1.1项目摘要随着人们生活水平的提高,宠物已经成为越来越多家庭的重要成员。然而,宠物的数量增长也带来了一系列问题,如流浪宠物数量的增加、宠物健康管理的缺失以及宠物领养收养信息的不透明等。这些问题不仅影响了宠物的生存状况,也给社会带来了一定......
  • Java设计模式 —— Java七大设计原则详解
    文章目录前言一、单一职责原则1、概述2、案例演示二、接口隔离原则1、概述2、案例演示三、依赖倒转原则1、概述2、案例演示四、里氏替换原则1、概述2、案例演示五、开闭原则1、概述2、案例演示六、迪米特法则1、概述2、案例演示七、合成/聚合复用原则1、概述......
  • 如何控制java虚拟线程的并发度?
    jdk21中的虚拟线程已经推出好一段时间了,确实很轻量,先来一段示例:假如有一段提交订单的业务代码:1publicvoidsubmitOrder(IntegerorderId){2sleep(1000);3System.out.println("order:"+orderId+"issubmitted");4}ViewCode这里我们......
  • JAVA反序列化学习-CommonsCollections1(基于ysoserial)
    准备环境JDK1.7(7u80)、commons-collections(3.x4.x均可这里使用3.2版本)JDK:https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-windows-x64.execc3.2:<dependency><groupId>commons-collections</groupId><artifactId>commons-collection......
  • Java多线程回顾总结
    目录一.线程与创建线程方式简介二.Thread继承三.实现Runnable接口四.Callable接口五.使用线程池一.线程与创建线程方式简介线程与进程的区别:1、一个进程至少包含一个线程2、比如电脑上QQ,运行起来就是一个进程,QQ可以聊天同时也可以传文件,聊天和传文件就是两个不同......
  • 数据结构——小小二叉树第一幕(树的认知以及顺序结构二叉树(堆)的实现)超详细!!!!
    文章目录前言一、树1.1树的概念与结构1.2数相关术语1.3树的表示1.4树形结构的实际运用场景二、二叉树2.1概念与结构2.2特殊的二叉树2.2.1满二叉树2.2.2完全二叉树2.3二叉树存储结构2.3.1顺序结构2.3.2链式结构三、实现顺序结构二叉树3.1堆的概念与结构3.......
  • [Java] 获取操作系统类型
    需求描述在进行Java开发时,我们有时需要根据不同的操作系统执行不同的操作,例如在Windows系统下执行不同的命令,或者在Linux系统下调用不同的库函数。因此,判断当前运行的操作系统是十分重要的。此文将介绍如何使用Java判断当前操作系统,并给出相应的代码示例。代码示例OsUt......
  • ssm140基于java的奶茶店管理系统的设计与实现+jsp(论文+源码)_kaic
    毕业设计(论文)奶茶店管理系统 学   院                       专   业                       班   级                       学   号                   ......
  • JavaScript 字符串的常用方法有哪些
    速览JavaScript字符串的常用方法包括charAt、charCodeAt、concat、indexOf、lastIndexOf、slice、substring、toLowerCase、toUpperCase、trim、replace、split、padStart、padEnd等。详答1.基本信息JavaScript中的字符串是一种原始数据类型,提供了丰富的操作方法来处......