【八大排序(一)】插入排序与希尔排序

embedded/2025/1/15 22:07:38/

❣博主主页: 33的博客❣
▶️文章专栏分类:八大排序◀️
🚚我的代码仓库: 33的代码仓库🚚
🫵🫵🫵关注我带你了解更多排序知识

在这里插入图片描述

目录

  • 1.前言
  • 2.常见算法>排序算法
  • 3.稳定性
  • 4.插入排序
    • 4.1概念
    • 4.2直接插入排序
    • 4.3希尔排序
  • 5.总结

1.前言

所谓排序,就是把一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。在日常生活中,排序的应用十分广泛,比如大家最讨厌的就是读书时期的按照名次排序,还有在打牌时,也会用到排序,那么就搞快来和博主一起学习吧!!!

2.常见算法>排序算法

在这里插入图片描述


3.稳定性

稳定性就是,当一个算法>排序算法对一个数组排序的时候,两个相同的数,在排序后相对位置有没有发生变化。如下:
在这里插入图片描述


4.插入排序

在实际生活中,玩扑克牌就用到了插入排序
在这里插入图片描述

4.1概念

把待排序序列按其关键值得大小插入到一个已经排好序的序列中,直到所有记录插入为止。


4.2直接插入排序

画图理解:
当已经有一组有序的序列时【1,2,4,5】,插入就一个元素【3】

插入排序


代码实现:

public int[] insertOrder(int[] arr){for (int i=1;i<arr.length;i++){int tmp=arr[i];int j=i-1;for (;j>=0;j--){if(arr[j]>tmp){arr[j+1]=arr[j];}else break;}
//            while (j>=0&&arr[j]>tmp){
//                arr[j+1]=arr[j];
//                j--;
//            }arr[j+1]=tmp;}return arr;}

时间复杂度:O( n 2 n^2 n2)
空间复杂度:O(1)
稳定性:稳定


4.3希尔排序

希尔派苏又称缩小增量法。希尔排序的基本思想:先选定一个整数,把待排序文件中所有记录分成多个组,并对每一组内的记录进行排序。然后,取,重复上述分组和排序的工作。当到达gap=1时,所有记录在统一组内排好序
分组排序:
分组的时候可以挨着分,也可以岔着分,那么具体该用那种分组方式呢?
在这里插入图片描述
在这里插入图片描述
观察上诉两种分组方式,我们发现岔开分会让数组更有序,小数据在左边,大数据在右边,更利于插入操作。
在这里插入图片描述
希尔排序总结:

  1. 希尔排序是对直接插入排序的优化。
  2. 当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了,这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。
  3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定。我们暂时就按照O( n 1.25 n^{1.25} n1.25)到O( 1.6 ∗ n 1.25 1.6*n^{1.25} 1.6n1.25)来算。

代码实现:

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

时间复杂度O( n 1.25 n^{1.25} n1.25)到O( 1.6 ∗ n 1.25 1.6*n^{1.25} 1.6n1.25
空间复杂度:O(1)
稳定性:不稳定


5.总结

本篇文章主要介绍了八大排序中的其中两个排序:直接插入排序和希尔排序,以及它们的时间复杂度,空间复杂度,稳定性都是需要我们好好掌握的,下篇文章博主将继续和大家分享选择排序。
最后大家分享一个网站:https://visualgo.net/en
这是一个在学习八大排序时,便于我们理解的一个网站,里面有许多算法>排序算法,可以通过图形结合,帮助我们更好的学习。
在左上角可以切换中英文:
在这里插入图片描述

下期预告:选择排序与堆排序


http://www.ppmy.cn/embedded/14593.html

相关文章

pnpm的安装与配置(Windows/macOS)

&#x1f4e6; PNPM的安装与配置&#xff08;Windows与macOS&#xff09; &#x1fa9f; Windows系统下安装与配置PNPM 步骤一&#xff1a;安装Node.js 首先&#xff0c;访问 Node.js官方网站 获取适用于Windows操作系统的最新稳定版安装程序。在安装过程中&#xff0c;请确…

dial tcp 192.168.0.190:443: connect: connection refused

1、场景 用nerdctl登录镜像仓库192.168.0.190&#xff08;Harbor&#xff09;&#xff0c;报错 ERRO[0006] failed to call tryLoginWithRegHost error"failed to call rh.Client.Do: Get \"https://192.168.0.190/v2/\": dial tcp 192.168.0.190:…

[Android]Jetpack Compose状态管理

在 Jetpack Compose 中&#xff0c;状态管理是构建交互式应用程序的核心。Compose 设计思想强调了不变性和重新组合的概念&#xff0c;以支持高效的 UI 更新。 一、使用 Remember 和 MutableState 管理状态 remember 和 mutableStateOf 是管理状态的基础工具&#xff0c;特别…

山海鲸大屏:驱动医药零售智能化变革

在数字化浪潮席卷全球的今天&#xff0c;医药零售行业也正以前所未有的速度与力度进行智能化转型。其中&#xff0c;山海鲸智慧医药零售大屏以其创新的设计理念、强大的功能集成与卓越的数据处理能力&#xff0c;成为推动医药零售迈向智能化、精准化的新引擎。本文将全方位解读…

企业微信hook接口协议,开放平台id转企业用户id

开放平台id转企业用户id 参数名必选类型说明uuid是String每个实例的唯一标识&#xff0c;根据uuid操作具体企业微信 请求示例 {"uuid":"3240fde0-45e2-48c0-90e8-cb098d0ebe43","openid":["woO9o4EAAAUg47yCUh1mDYVh71AJ8R3w"] } …

03-JAVA设计模式-策略模式

策略模式 什么是策略模式 策略模式&#xff08;Strategy Pattern&#xff09;是行为设计模式之一&#xff0c;它使你能在运行时改变对象的行为。在策略模式中&#xff0c;一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中&#xff0c;…

开源代码分享(22)-基于拉格朗日松弛的电动汽车分布式充放电调度

1.分布式充放电控制方法 与集中式控制中调度机构直接下达充电指令不同 &#xff0c; 分布式控制中 &#xff0c;调度机构根据系统运行状况发出调度信号 &#xff0c; 用户接收调度信号优化充放电过程 、确定充放电曲线 &#xff0c; 并上报调度中心 。 当电动汽车数量较多时 &…

短视频素材哪里有?8个视频素材免费下载素材库无水印

在这个视觉内容至关重要的时代&#xff0c;每一位视频创作者都需要接触到多样化和高质量的视频素材&#xff0c;以提升作品的吸引力和专业度。以下这些视频素材网站将为你提供从全球各地收集的丰富资源。 1. 蛙学府&#xff08;中国&#xff09; 着重提供有关中国文化和场景的…