【排序,直接插入排序 折半插入排序 希尔插入排序】

文章目录

  • 排序
    • 排序方法的分类
    • 插入排序
      • 直接插入排序
      • 折半插入排序
      • 希尔插入排序

排序

将一组杂乱无章的数据按照一定规律排列起来。将无序序列排成一个有序序列。

排序方法的分类

储存介质:

  • 内部排序:数据量不大,数据在内存,无需内外存交换数据。
  • 外部排序:数据量较大,数据在外存(文件排序)。

比较器个数:

  • 串行排序:单处理机(同一时刻比较一对元素)。
  • 并行排序:多处理机(同一时刻比较多对元素)。

主要操作:

  • 比较排序:用比较的方法。
    插入排序,交换排序,选择排序,归并排序
  • 基数排序:不比较元素的大小,仅仅根据元素本身的取值确定其有序位置。

辅助空间:

  • 原地排序:辅助空间用量为O(1)的排序方法。
  • 非原地排序:辅助空间用量超过O(1)的排序方法。

稳定

  • 稳定排序
  • 非稳定排序

插入排序

直接插入排序

前提是数组中的元素是有序的。
在这里插入图片描述

#include<stdio.h>void PrintArr(int arr[],int l);
void InsertSort(int arr[], int l);//#define MAXSIZE 20	//设记录的值不超过20个
//#define  KeyType int//设关键字为整型量
//#define InfoType int //定义InfoType的其他数据项
//
//
//typedef struct {
//	KeyType key;//定义每个记录(数据元素)的结构
//	InfoType otherinfo;//其他数据项
//}RedType;
//
//typedef struct SqList {
//	RedType r[MAXSIZE + 1];//存储顺序表的结构
//						//r[0]一般做哨兵或者缓冲区
//	int length;//顺序表的长度
//}SqList;
//
//void InsertSort(SqList S) {
//	int i, j;
//	for (i = 2; i < S.length; i++) {
//		if (arr[i]  < arr[i - 1] ) {
//			arr[i]  = arr[0] ;
//		
//		for (j = i - 1; arr[j]  > arr[0] ; j--) {
//			arr[j + 1] = arr[j];//j的值都要依次向后移,进行插入
//		}
//		arr[j+1]  = arr[0] ;//这里直接将哨兵的值赋值给当前查出来正确的位置
//		}
//	}
//}void InsertSort(int arr[], int l) {int i = 0, j;int temp;printf("请输入要插入的数:");scanf_s("%d", &temp);arr[i] = temp;for (i = 2; i < l; i++) {if (arr[i] < arr[i - 1]) {arr[i]  = arr[0] ;for (j = i - 1; arr[j]  > arr[0] ; j--) {arr[j + 1] = arr[j];//j的值都要依次向后移,进行插入}arr[j+1]  = arr[0] ;//这里直接将哨兵的值赋值给当前查出来正确的位置}}PrintArr(arr, l);
}void PrintArr(int arr[],int l) {int i;for (i = 1; i <= l; i++) {printf("%d ", arr[i]);}
}int main() {int arr[10] = { 1,2,3,4,5,6,7,14, 12};InsertSort(arr,10);return 0;
}

折半插入排序

查找插入位置时采用折半查找法。
在这里插入图片描述

void BInsert(SqList &S) {int i, j,low,high,mid;for (int i = 2; i <= S.length; i++) {if (S.r[i].key < S.r[i - 1].key) {S.r[i] = S.r[0];low = 1, high = i - 1;while (low <= high) {mid = (low + high) / 2;if (S.r[0].key <S.r[mid].key) {high = mid - 1;}else {high = mid + 1;}}for (j = i - 1; j < high + 1; j--) {S.r[j - 1] = S.r[j];S.r[high + 1] = S.r[0];}}}
}

希尔插入排序

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

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

相关文章

JeecgBoot低代码开发—Vue3版前端入门教程

JeecgBoot低代码开发—Vue3版前端入门教程 后端接口配置VUE3 必备知识1.vue3新特性a. https://v3.cn.vuejs.org/b.setup的用法c.ref 和 reactive 的用法d.新版 v-model 的用法e.script setup的用法 2.TypeScript基础 后端接口配置 如何修改后台项目路径 http://127.168.3.52:8…

【brpc学习实践】ParallelChannel的使用与并行请求

概览 ParallelChannel (有时被称为“pchan”)同时访问其包含的sub channel,并合并它们的结果。用户可通过CallMapper修改请求,通过ResponseMerger合并结果。ParallelChannel看起来就像是一个Channel: 支持同步和异步访问。 发起异步操作后可以立刻删除。 可以取消。 支持超…

ELFK集群部署(Filebeat+ELK) 本地收集nginx日志 远程收集多个日志

filebeat是一款轻量级的日志收集工具&#xff0c;可以在非JAVA环境下运行。 因此&#xff0c;filebeat常被用在非JAVAf的服务器上用于替代Logstash&#xff0c;收集日志信息。 实际上&#xff0c;Filebeat几乎可以起到与Logstash相同的作用&#xff0c; 可以将数据转发到Logst…

Python与ArcGIS系列(十一)SearchCursor方法

目录 0 简述1 SearchCursor检索要素2 where子句筛选3 几何令牌改进SearchCursor性能0 简述 从要素类和图层中以只读的方式进行检索,如获取GDP超过多少以上的城市列表。除此之外,可以进一步地对数据进行where筛选,以获取数据集子集;大数据量的情况下这种方式效率可能较低,…

【产品功能】dolphinscheduler怎么修改,实现超时就结束掉当前工作流

超时就结束工作流 代码 代码 MasterExecThread类 的 runProcess方法 里面有超时告警&#xff0c;原本里面只有超时告警的&#xff0c;这时候我只要加上海豚自己写好的结束任务的方法endProcess&#xff08;&#xff09;方法

pycharm编译报错处理

1.c生成工具下载 https://visualstudio.microsoft.com/visual-cpp-build-tools/ 在这里插入图片描述 pip install pycocotools

遭到美国做空机构“灰熊”做空后,人工智能公司商汤科技股价暴跌

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;在遭到美国做空机构Grizzly Research&#xff08;灰熊&#xff09;指控夸大收入后&#xff0c;商汤科技的股价在周二一度下跌了9.7%。 Grizzly Research在周二发布的一份报告中称&#xff0c;商汤…

基于java的职工便利系统【大学期末结课作业】

需求分析 背景和目标 基于现在的各类企业的职工在企业日常工作及生活中所需要的各类需求&#xff0c;通过使用Java语言开发一个职工便利系统&#xff0c;以方便职工完成公司内的日常事务&#xff0c;提高工作效率。 设计目的: 设计职工便利系统的主要目的是为了提升职工的工作…

Jenkins部署配置及Jenkinsfile流水线任务示例【无图版】

一、下载 JDK环境下载&#xff1a;https://repo.huaweicloud.com/java/jdk/11.0.113/jdk-11.0.1_linux-x64_bin.tar.gz Jenkins安装包下载&#xff1a;https://github.com/jenkinsci/jenkins/releases/tag/jenkins-2.375.3 二、Jdk/Java环境配置 解压 tar -zxvf jdk-11.0.…

FFmpeg之将视频转为16:9(横屏)或9:16(竖屏)(一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

[RK-Linux] 移植Linux-5.10到RK3399(一)| 搭建系统并让系统跑起来

这个专题主要记录把 RK Linux-5.10 移植到 ROC-RK3399-PC Pro 的过程。 文章目录 一、u-boot 移植二、内核移植三、文件系统移植四、固件编译与打包五、移植问题处理一、u-boot 移植 首先进入 rk3399 板级配置文件目录 device/rockchip/rk3399,可以看到有一个 BoardConfig-rk…

全文检索[ES系列] - 第495篇

历史文章&#xff08;文章累计490&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 M…

闭包与装饰器

章节目录&#xff1a; 一、闭包1.1 相关概述1.2 基本使用 二、装饰器2.1 相关概述2.1 装饰器最早版本2.3 基本使用2.4 装饰带有参数的函数2.5 装饰带有返回值的函数2.6 通用装饰器2.7 带有参数的装饰器2.8 类装饰器2.9 装饰器的使用场景 三、装饰器总结四、结束语 一、闭包 Pyt…

知识蒸馏代码实现(以MNIST手写数字体为例,自定义MLP网络做为教师和学生网络)

dataloader_tools.py import torchvision from torchvision import transforms from torch.utils.data import DataLoaderdef load_data():# 载入MNIST训练集train_dataset torchvision.datasets.MNIST(root "../datasets/",trainTrue,transformtransforms.ToTens…

ES6中的类

1、Class 类是一种可选&#xff08;而不是必须&#xff09;的设计模式&#xff0c;而且在 JavaScript 这样的 [[Prototype]] 语言中实现类是很别扭的。大致解决了以下问题&#xff1a; 不再引用杂乱的 .prototype 了Button 声 明 时 直 接“ 继 承 ” 了 Widget&#xff0c; …

Docker容器化平台及其优势和应用场景介绍

Docker是一种开源的容器化平台&#xff0c;它基于操作系统级别虚拟化技术&#xff0c;可以将应用程序及其依赖项打包成一个独立的容器&#xff0c;提供轻量级、一致性、可移植性的应用环境。Docker的基本概念和优势如下&#xff1a; 镜像(Image)&#xff1a;Docker容器的基础&…

JAVA对象转HashMap如何快速强转

小编我最近看到了些资料,之前JAVA对象转DTO都是另外写类&#xff0c;进行强转&#xff0c;里面有些Long类型&#xff0c;日期类型&#xff0c;都是转成String类型&#xff0c;现在有快速优雅得解决方式 我们需要得Map结构是 Map<String,object> 简单说明一下这个类&…

QT Day01 qt概述,创建项目,窗口属性,按钮,信号与槽

1.qt概述 1.什么是qt Qt 是一个跨平台的 C 图形用户界面应用程序框架。它为应用程序开发者提供建立艺 术级图形界面所需的所有功能。它是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正的组 件编程。 2.支持的平台 Windows – XP 、 Vista 、 Win7 、 Win8…

Java(119):ExcelUtil工具类(org.apache.poi读取和写入Excel)

ExcelUtil工具类(XSSFWorkbook读取和写入Excel),入参和出参都是:List<Map<String,Object>> 一、读取Excel testdata.xlsx 1、new XSSFWorkbook对象 File file = new File(filePath); FileInputStream fis = new FileInputStream(file);…

8.二维数组——将一个二维数组行和列的元素互换,存到另一个二维数组中。

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 前言 本系列为二维数组编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 将一个二维数组行和列的元素互换&#xff0c;存到另一个二维数组中。 二、题目分析 三、解题 程序运行代码 #incl…