数组插入排序和希尔排序

C++学习(四六六)Multiple parse contexts are available for this file Note: Multiple parse contexts are available for this file. Choose the preferred one from the editor menu 参考: "Multiple parse contexts" in Qt creator | Qt ForumHi Do you use sessions? https://bugreports.qt.io/browse/QTCREATORBUG-18521 Anyway, its not. 阅读详情

1.插入排序

如动图所示

从数组第一个数开始,加入数组前面的一个数,将加入的数与前面的比较如果,如果这个数比前面的数要小,这两个数的数值交换,如果比前面的数值要大那么就停止交换。将数组下一个数加入到其中继续进行比较交换。。。。。。一直到数组里没有数据可以进行交换那么这个排序就完成了

代码实现

void swap(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}
void InsertSort(int* a, int n)
{
	for (int i = 0; i < n-1; i++)
	{
		int end = i;
		while (end >= 0)
		{
			if (a[end] > a[end + 1])
			{
				swap(&a[end], &a[end + 1]);
				end--;
			}
			else
			{
				break;
			}
		}
	}
}

2.希尔排序

希尔排序就是插入排序的优化

假设一个这样的数组,如果使用插入排序,那么它的排序逻辑就是这样的,如下图所示。 

 

每个插入进来的数值都要在数组中完全遍历一遍才结束,那么这种方式的效率就太低了。

而希尔排序就是在插入排序之前先将数组进行预处理(尽量将较大的数值放入数组的后面)然后再一次进行插入排序。这样插入排序的效率就大大提升这就是希尔排序。 

将间隔为3的数值进行插入排序,完成之后再将整个数组进行插入排序就完成了希尔排序。 

 代码实现

void swap(int* a, int* b)
{
	int temp = *a;
	*a = *b;
	*b = temp;
}
void ShellSort(int* a, int n)
{
	int gap = n - 1;
	while (gap>0)
	{
		for (int begin = 0; begin < gap; begin++)
		{
			for (int end = begin+gap; end < n; end=end+gap)
			{
				int end1 = end;
				while (end1>0 && a[end1]<a[end1-gap])
				{
					swap(&a[end1], &a[end1 - gap]);
					end1 = end1 - gap;
				}
			}
		}
		gap = gap / 2;
	}
}

Qwen3-Omni-30B-A3B-Instruct微调指南:如何打造专属智能博物官(附数据集) 本文详细介绍了如何对Qwen3-Omni-30B-A3B-Instruct模型进行微调,以打造专业的智能博物官。指南涵盖了从理解模型架构优势、构建高质量文博数据集,到使用LLaMA-Factory进行实战微调、效果评估与部署优化的完整流程,并提供了关键的环境配置与性能优化建议,帮助开发者在垂直领域高效定制专属AI助手。 阅读详情

相关推荐

手把手教你为Multisim 14.0创建自定义元件:以SPICE模型导入为例

本文详细介绍了如何在Multisim 14.0中创建自定义元件,重点讲解了SPICE模型的导入与应用。通过系统性的步骤指南,包括元件符号设计、引脚定义、SPICE模型关联及验证测试,帮助工程师高效扩展元件库,满足特定设计需求。文章还提供了故障排除和性能优化的实用技巧,确保自定义元件在实际仿真中的可靠性。

weixin_42531163的博客 286

两个数组的最小乘积和&&说明希尔排序对插入排序的优化

实例--说明希尔排序对插入排序的优化--两个数组的最小乘积和

学习-记录-分享创造价值 933

西门子PLC1200与CB1241模块的Modbus RTU从站配置全流程(附串口调试技巧)

本文详细介绍了西门子S7-1200 PLC与CB1241通信模块实现Modbus RTU从站配置的全流程,包括硬件接线规范、TIA Portal工程组态、通信指令编程及串口调试技巧。通过实战案例和常见错误处理方案,帮助工程师快速搭建稳定的工业通信系统,提升自动化设备的互联互通能力。

weixin_29165725的博客 329

java类实现数组的五种排序 冒泡排序、选择排序、插入排序、希尔排序、数组排序

public class sort { /** * @param args * 对数组进行排序冒泡排序、选择排序、插入排序、希尔排序、数组排序 * 五种排序的方法 */ public static void main(String[] args) { // TODO Auto-generated method stub int a[] = new int[7]; a[0]=12; a

何足道也 815

YOLOv8环境搭建+训练自己的数据详细项目

直接按照路径会有问题,找到自己 requirements.txt 文件路径,我这里是pip install -r D:\ultralytics-main\ultralytics-main\requirements.txt。首先去自己的anaconda的安装的envs(虚拟环境),在导航栏输入cmd,进入命令窗口。到官方网站下载yolo模型 ,下载好后解压,里面有个文件requirements.txt。然后安装ultralytics ,这是必须的。

m0_63172128的博客 2万+

国科大作业考试资料-人工智能原理与算法-2024新编-第十一次作业整理

1、有一位教授想知道学生是否睡眠充足。每天,教授观察学生在课堂 上是否睡觉,并观察他们是否有红眼。教授获得如下的领域知识: (1)没有观察数据时,学生睡眠充足的先验概率为0.7。 (2)给定学生前一天睡眠充足为条件,学生在晚上睡眠充足的概率是0.8;如果前一天睡眠不充足,则是0.3。 (3)如果学生睡眠充足,则红眼的概率是0.2,否则是0.7。 (4)如果学生睡眠充足,则在课堂上睡觉的概率是0.1,否则是0.3。 将这些信息形式化为一个动态贝叶斯网络,使教授可以使用这个网络从观察序列中进行滤波和预

MatsumotoChrikk 1056

c语言数组希尔排序,插入排序和希尔排序,C语言实现

插入排序的思想:只有一个元素的数组一定是有序的,我们可以把第二个元素放在正确的位置,使这两个元素组成的数组保持有序。接着可以把第三个元素放在正确的位置,使这三个元素组成的数组仍然保持有序。数组的插入操作的时间复杂度为O(N),需要执行n - 1次,所以插入排序的时间复杂度是O(N2)。插入排序是简单排序中最快的一种,特别是当整个数组是有序的时候,插入排序的时间复杂度是O(N)。当数据规模比较小 (...

weixin_35860804的博客 190

ENVI入门系列教程---一、数据预处理---1.1基本操作--5.x以后的界面(新界面)

every blog every motto: You never know how strong you really are until being strong is the only choice you have。 0. 前言 本系列教程旨在系统学习并梳理ENVI。说来惭愧,作为一名GISer,对ENVI这类软件还不能熟练掌握,这也是本系列教程的初衷。种一棵树最好的时间是十年以前,其次是...

胡侃有料的博客 1万+

希尔排序详解

摘要:插入排序固然是个好排序,因为它的排序效率是和数组状态挂钩的,它的最好情况时间复杂度很理想,但是它存在一个巨大的问题,那就是在整个数组的前n-1个数字都有序,唯独最后一个数字的存在导致整个数组无序时,会出现比较严重的浪费现象,因此人们更新了插入排序,并命名这种更新的方法为希尔排序,接下来我们详细介绍希尔排序。

云杉木屋 2222

【YOLO26科研级突破】集成BiFPN双向特征金字塔,让多尺度特征融合效率与精度双跃升

打开确保模型解析器能识别BiFPN模块。通过将BiFPN双向特征金字塔集成到YOLO26中,我们实现了一个“全尺度双向特征流动+加权融合+精准检测”的目标检测模型。这个改进不仅在工程上能大幅提升多尺度、复杂场景下的检测精度,更在科研上提供了“双向特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的Neck模块改进中,帮你在论文中打造独特的研究点。

LXY_LOVE36的博客 200

PCL点云库入门(第6讲)——PCL库中Eigen数学工具库的基本使用(持续更新)

Eigen库是一个高性能的C++模板库,专注于线性代数、矩阵和向量运算,以及相关的数值分析和算法。在Eigen库中,所有的矩阵和向量均被视为矩阵模板类的实例。向量可以被看作是特殊形式的矩阵,具体表现为只包含1行或1列。

qq_36812406的博客 1755

java数组排序算法01-冒泡,选择,希尔排序,插入排序

java数组排序算法 冒泡排序 原理:数组元素两两比较,交换位置,大元素往后放,经过一轮比较后,最大的元素,就会出现在最大索引处。 O(n^2) public class BubbleSort { public static void main(String[] args) { int[] arr = {1,34,23,3,45,6}; int[] arr2 = bubble(arr); for (int i = 0; i < arr2.leng

shake_shark_pp 163

使用GBIF获取生物多样性数据与GIS的结合

随着全球生物多样性的重要性日益凸显,越来越多的研究人员和保护机构开始利用地理信息系统(GIS)来分析和可视化生物多样性数据。GBIF(全球生物多样性信息设施)作为一个全球性的生物多样性数据库,提供了大量的物种分布和分类信息,为研究人员和保护工作者提供了宝贵的数据资源。本文将介绍如何使用GBIF API获取生物多样性数据,并将其与GIS技术相结合,以便更好地理解和研究生物多样性。利用GIS的强大功能,我们可以在地理空间上可视化物种分布、分析物种多样性的空间格局,并为保护生物多样性提供科学依据。

BnxBackend的博客 1765

【排序算法】冒泡排序 选择排序 插入排序 希尔排序(数组)

既然希尔排序是距离不断缩小的插入排序,那为什么希尔排序不需要用到元素的循环右移?希尔排序的底层真的只是简单的插入排序吗? 代码 #include<iostream> using namespace std; #define SWAP(a,b) {int tmp;tmp=a;a=b;b=tmp;} int main() { int a[1000]; //总数 int tota...

寒泉 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

插入排序和希尔排序

gap(间隔)的取值没有固定说法,但gap = n/3+1是较为合理的,因为这样既保证了最后可以取到gap == 1的时候(即最后一次排序可以完成完全排序),又可以保证分出的间隔不会过于繁琐。end应从0下标开始,(因为若end从1开始,不确定前两个数据是否有序),插入排序中end开始的位置必须保证end之前必须有序。希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些树中给出的希尔排序的时间复杂度都不固定。时,数组已经接近有序的了,这样就会很快。,它是一种稳定的排序算法。

cy18779588218的博客 992

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数组排序 (选择排序、冒泡排序、插入排序、希尔排序)

选择排序 package com.Java;public class ArraySortSelect {public void selectSort(int [] arr){//定义一个选择排序的方法   for (int i = 0; i < arr.length-1; i++) {     for (int j = i+1; j < arr.length; j++) ...

weixin_30740581的博客 110

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

难以想象的排序效率:希尔排序和插入排序的比较

最开始学习排序是冒泡排序,那时候以为排序总不过就是两两比较,然后交换值而已:今天突然想实现一线以前所有学过的排序算法,对10w级别以上的数组进行排序的时候,希尔排序和插入排序的效率简直不在一个数量级上的。            现在还有一个疑虑就是希尔排序的增量的确定的问题,我的方法是一个固定的增量区间,对排序的数组的元素个数 all = (int)log(size*4) + 1; //增量的个

/*李大叔*/ 的专栏 4323

希尔排序和插入排序

希尔排序 public class ShellSort extends Object{ int data[]=new int[8]; int size=8; public static void main(String[] args) { ShellSort test=new ShellSort(); test.inputarr(); System.out.printf("你输入的原始数组是:"); test.s.

weixin_51591544的博客 549

插入排序,希尔排序

插入排序 思路 从一堆无序的元素中(后半部分) 找一个出来,插入到一个有序的序列中(按照大小找到合适的位置)。 插入排序的思想是,假定第一个元素已经排好序了,后面的元素依次往里插。首先,第二个元素与一个元素比较,如果第二个元素小,就交换位置,下一次轮询,第二个元素与第三个元素比较,如果第三个元素小,就交换位置,接着,再比较第二个元素和第一个元素,把小的放在前面。 代码实现 //插入排序 ...

发光吖的博客 182

插入排序与希尔排序

static void shellSort(int[]arr) { for(int interval=arr.length/2;interval>0;interval=interval/2) { for(int i=interval;i<arr.length;i++) { int target=arr[i]; int j=i-interval; whi...

qq_44146560的博客 139

4.希尔排序

在上一文《插入排序》中我们得知其时间复杂度为O(n^2),这是一个很低效的排序。在这篇文章中我们将学习插入排序的进阶版希尔排序,希尔排序的效率比插入排序的效率高非常多。

Yu_Lijing的博客 495

数据结构之希尔排序(插入排序)

数据结构之希尔排序(插入排序) 希尔排序(Shell`s Sort)又称“缩小增量排序”(Diminishing Increment Sort),是插入排序的一种,因D.L.Shell于1959年提出而得名。 希尔排序的诞生是由于插入排序在处理大规模数组的时候会遇到需要移动太多元素的问题。希尔排序的思想是将一个大的数组“分而治之”,划分为若干个小的数组,然后分别对划分出来的数组进行插入排序。希尔排序

南风古 769

C语言实现插入排序——希尔排序算法

C语言实现希尔排序 文章目录C语言实现希尔排序希尔排序算法项目完整代码运行效果图 希尔排序算法 //希尔排序算法 void ShellSort(int arr[], int len) { int d, i, j; //arr[0]只是暂存单元,不是哨兵,当j<=0时,表示到达插入位置 for (d = len / 2; d >= 1; d /= 2) { //步长变化,每次取一半 for (i = d + 1; i <= len; +

酒醉浮生的博客 1760

数据结构排序(c语言实现)--插入排序,希尔排序

介绍和实现:插入排序和希尔排序

2401_88348360的博客 814

6.python实现插入排序和希尔排序

插入排序 """ 插入排序核心思想 将数组分成一个有序数组和一个无序数组 每次从无序数组中提一个元素出来 插入到 有序元素的合适位置 """ from typing import List def insert_sort(arr: List) -> List: """ 插入排序 :param arr: :return: """ target = [] l = len(arr) for i in range(l): i

woshiwjma956的博客 163

java希尔排序的实例,Java 插入排序之希尔排序的实例

Java 插入排序之希尔排序的实例Java代码/*希尔排序(Shell Sort)是插入排序的一种。其基本思想是:先取定一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1* 个组,所有距离为d1的倍数的记录放在同一个组中,在各个组中进行插入排序;然后,取第二个增量d2* 直至所取的增量dt=1(dt* new int[]{8,5,1,7,9,4,6},开始分割集合的间隔长度为3的情况,[...

weixin_33512578的博客 152
上一篇: 数组选择排序
下一篇: 数组快排的四种方法
Arcane Code
博客等级 码龄3年 598粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值