插入排序+希尔排序

目录

插入排序:

希尔排序:


插入排序:

注意这里不要将插入排序和冒泡排序弄混:

插入排序是将数据不断放入前一个有序数列:

// 插入排序
void InsertSort(int* a, int n)
{for (int j =1; j < n; j++){for (int i = j; i > 0; i--){if (a[i] < a[i - 1]){int m = a[i - 1];a[i -1] = a[i];a[i] = m;}else{break;}}}	
}

希尔排序:

将插入排序进行多次实现,从高间距到低间距,最后到间距为1的插入排序:

如图我们将具有相同标记的方格记为一组,并分别对不同组进行插入排序,这样就会将序列变得比原来有序,这样不断进行,并不断缩小排序的间距。

这样再次进行排序将会变的更加有序,直到间距为1。间距为1时进行排序将变为插入排序,序列将完全有序。

target为间距

// 希尔排序
void ShellSort(int* a, int n)
{int target=n/2;while (target){for (int m = 0; m < target; m++)//实现多组排序{for (int j = m; j < n ; j += target)//单组排序{for (int i = j; i > target-1; i -= target)//这里不能是i>0,i-target最小为0{if (a[i] < a[i - target]){int m = a[i - target];a[i - target] = a[i];a[i] = m;}else{break;}}}}target /= 2;}	
}

当然这里我们进行三层循环有一些繁琐,这里我们可以改善成为两层循环:

也就是第一组进行一次插入排序,第二组进行一次插排序........不断前进

// 希尔排序
void _ShellSort(int* a, int n)
{int target = n / 2;while (target){for (int j = 0; j < n; j ++)//递进形式排序{for (int i = j; i > target - 1; i -= target)//这里不能是i>0,i-target最小为0{if (a[i] < a[i - target]){int m = a[i - target];a[i - target] = a[i];a[i] = m;}else{break;}}}target /= 2;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java类的多态作用及解析

多态是面向对象编程中一个重要的特性。简单来说&#xff0c;多态就是指同一个方法在不同的对象上有不同的实现。通过多态&#xff0c;我们可以在运行时根据对象的实际类型来动态地调用相应的方法&#xff0c;从而提高代码的灵活性和可扩展性。 以下是 Java 类中多态的一些作用…

sobel算子详解

Sobel 算子是一种常用的边缘检测算子&#xff0c;它 可以在图像中检测出边缘的位置和方向。Sobel 算子结合了平滑和微分操作&#xff0c;能够有效地检测出图像中的边缘。 Sobel 算子原理&#xff1a; Sobel 算子使用两个 3x3 的卷积核&#xff08;一个用于检测水平边缘&…

如何用HBuider x网页制作蜡笔小新

目录 下载软件 ​编辑 一.制作蜡笔小新个人介绍界面 二.制作蜡笔小新我的偶像界面 三.制作蜡笔小新我的家乡界面 四.制作蜡笔小新会员注册界面 下载软件 一、HBuilder IDE的下载 HBuilder下载官网地址&#xff1a;http://www.pc6.com/mac/140609.htmlHBuilderX官方电脑版…

UpGrow评论:AI能将我的Instagram粉丝数增加10倍吗?

UpGrow Review: Can AI Grow My Instagram Followers 10X? 概述 UpGrow是一款专注于Instagram增长的AI驱动型社交媒体工具。它通过其庞大的300多人的网络&#xff0c;先进的定位功能&#xff0c;实时分析以及卓越的客户服务&#xff0c;帮助用户有机地增长Instagram关注者。…

Oracle锁表解决方案

一&#xff1a;查看完成等待事件的SQL select distinct a.sid, a.event, a.seconds_in_wait, a.wait_class, c.sql_text, c.SQL_ID, d.spid, b.OSUSER, b.USERNAME, d.program from gv$session_wait a, gv$session b, gv$sqlarea c, gv$process d where a.sid b.sid and a.st…

leetcode排列硬币

求根公式解法 public static int arrangeCoins(int n) {return (int) ((Math.sqrt((long) n * 8 1) - 1) / 2);} 二分法 暂未实现 牛顿迭代 暂未实现

【机器学习-07】逻辑回归(Logistic Regression)的介绍和python实现

Logistic Regression 虽然被称为回归&#xff0c;但其实际上是分类模型&#xff0c;并常用于二分类。主要用来表示某件事情发生的可能性&#xff0c;因此因变量的范围在 0 和 1 之间。Logistic Regression 因其简单、可并行化、可解释强深受工业界喜爱。例如&#xff0c;探讨引…

MyBatis配置文件详解

下面是一个典型的 MyBatis 配置文件 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configurat…

Acwing.1355 母亲的牛奶(BFS)

题目 农夫约翰有三个容量分别为 A,B,C升的挤奶桶。 最开始桶 A和桶 B都是空的&#xff0c;而桶 C里装满了牛奶。 有时&#xff0c;约翰会将牛奶从一个桶倒到另一个桶中&#xff0c;直到被倒入牛奶的桶满了或者倒出牛奶的桶空了为止。 这一过程中间不能有任何停顿&#xff0…

前端静态开发案例-基于H5C3开发的仿照视频网站的前端静态页面-2 样式表部分和效果展示

原创作者&#xff1a;田超凡&#xff08;程序员田宝宝&#xff09; 版权所有&#xff0c;引用请注明原作者&#xff0c;严禁复制转载 charset "utf-8"; /* 程序员田宝宝原创版权所有&#xff0c;仿冒必究&#xff0c;该界面是仿照某视频网站官网开发的静态页面 */ …

Python 操作sqllite

共有5个字段&#xff0c;实现增、查、改功能 import sqlite3 import threading import functoolsPATH_DATABASE threelang.dbdef synchronized(func):functools.wraps(func)def wrapper(self, *args, **kwargs):with self.lock:return func(self, *args, **kwargs)return wra…

基于Jenkins + Argo 实现多集群的持续交付

作者&#xff1a;周靖峰&#xff0c;青云科技容器顾问&#xff0c;云原生爱好者&#xff0c;目前专注于 DevOps&#xff0c;云原生领域技术涉及 Kubernetes、KubeSphere、Argo。 前文概述 前面我们已经掌握了如何通过 Jenkins Argo CD 的方式实现单集群的持续交付&#xff0c…

埃克拉姆·阿拉姆,MindPortal的CEO和联合创始人 - 采访系列

Ekram Alam 专访&#xff1a;MindPortal 创始人兼首席执行官 引言 Ekram Alam 是 MindPortal 的创始人兼首席执行官&#xff0c;该公司致力于开发非侵入式神经接口&#xff0c;改变人类与人工智能的交互方式。他们的使命是通过让用户仅通过思想与人工智能交互&#xff0c;从而…

c++11笔记 跨平台线程池

1. 左值&#xff1a; 简单的说&#xff0c;可以放在等号左边的变量可以称之为左值&#xff0c;可以对该变量进行取地址运算的是左值,左值在内存中有确切的地址&#xff0c;可以长期存在&#xff0c;拥有具体的名字的。 比如 int a 10; int *p &a;//这里的a就是左值 2.…

java 继承(下)

前面我们已经说明了什么是继承&#xff1f;继承的好处弊端等&#xff0c;不清楚的可参照链接 java 继承&#xff08;上&#xff09;-CSDN博客 本篇文章主要理解 继承中变量&#xff0c;构造方法&#xff0c;成员方法的访问特点。 1、继承中变量的访问特点 1.1 代码实现 不看…

亚马逊认证考试系列 - 知识点 - 安全组简介

AWS安全组是一种虚拟防火墙&#xff0c;用于控制实例进出网络流量。安全组是一个实例级别的防火墙&#xff0c;可以定义哪些流量可以进入或离开特定的EC2实例。 功能&#xff1a;安全组可以用于限制特定类型的流量&#xff0c;如HTTP或SSH&#xff0c;允许特定IP地址范围的流量…

若依添加页面

背景&#xff1a;我想增加的是一个收支管理的页面 views中直接添加income文件夹&#xff0c;里面放着index.vue 网页的菜单中添加这个页面的菜单

基于springboot的留守儿童爱心网站

技术&#xff1a;springbootmysqlvue 一、系统背景 现代社会&#xff0c;由于经济不断发展&#xff0c;旧物捐赠的数量也在不断的增加&#xff0c;人们对留守儿童爱心信息的需求也越来越高。 以往的留守儿童爱心的管理&#xff0c;一般都是纸质文件来管理留守儿童爱心信息&am…

分布式异步任务框架celery

Celery介绍 github地址&#xff1a;GitHub - celery/celery: Distributed Task Queue (development branch) 文档地址&#xff1a;Celery - Distributed Task Queue — Celery 5.3.6 documentation 1.1 Celery是什么 celery时一个灵活且可靠的处理大量消息的分布式系统&…

rust学习(简单handler实现)

用过android的同学对于handler应该都很了解&#xff0c;用起来比较方便。这里用rust设计了一个简单的rust。 1.处理接口 pub trait ProcessMessage {fn handleMessage(&self,msg:Message); } 2.Message结构体 pub struct Message {pub what:u32,pub arg1:i32,pub arg2:…