一、排序基本概念

1.就地排序:使用恒定的额外空间来产生输出

就地排序只是在原数组空间进行排序处理,也就是输入的数组和得到的数组是同一个

2.内部排序和外部排序:待排序数据可以一次性载入到内存中为内部排序,反之数据量过大就是外部排序

本科阶段几乎都是内部排序

3.稳定排序:排序前后序列中键值相等的元素在相对位置不发生变化的就是稳定排序

4.哪些排序是稳定和不稳定:

a.冒泡排序(Bubble sort),插入排序(Insrtion sort),归并排序(Merge sort)和计数排序(Counting sort)等本身就具有稳定排序的特质

b.快速排序、堆排序等是不稳定排序

c.虽然很多算法本身具有稳定或不稳定排序性质但是任何排序只要稍作修改就可以修改稳定性,例如在冒泡排序中判断交换顺序的依据是if(a>b)只要变成if(a>=b)就可以破坏稳定性

二、插入排序

特点:

1,经过几次排序后,前几个元素就已经有序了,后序元素是否有序无关

2,怕新元素是前面已经有序元素的最小值

3.如果待排序的元素,已经有序,只有极个别的元素是无序,插入速度较快

4.如果元素是链式存储,非常时候插入排序

三、代码实现

1.头文件中的接口

//
// Created by 27893 on 2025/8/9.
//#ifndef INSERTSORT_H
#define INSERTSORT_H
typedef struct {int key;void*data;
}Element;typedef struct {Element*data;int len;
}SortTable;void insertSort(SortTable*table);
#endif //INSERTSORT_H

2.算法的实现

//
// Created by 27893 on 2025/8/9.
//#include "InsertSort.h"void insertSort(SortTable *table) {//从第二个开始插入for (int i=1;i<table->len;i++) {if (table->data[i].key<table->data[i-1].key) {//用j来辅助查找元素的真正待插入位置int temp=table->data[i].key;int j=i-1;//只要待插入元素比j指向位置还小就往前while (j!=-1&&temp<table->data[j].key) {table->data[j+1].key=table->data[j].key;j--;}//否则结束插入到j的后一个位置table->data[j+1].key=temp;}}
}

四、希尔排序

1.希尔排序说明

在插入排序中,我们可能会遇到一个很小的数到很后面才发现,这样就要和前面有序区的很多元素进行比较,时间复杂度接近O(n^2)

而希尔排序是将每次步长调大一点,刚开始一般为数组长度的一半,比如下面的表元素个数为10,我们第一次排序就拿当前元素与当前元素后面的第5个进行比较,这样的比较进行5次

第二次我们步长为上次的一半,每次和自己后面的第2个进行比较,这样的比较进行两次

直到步长为0,结束我们的循环,这样时间复杂度最多为O(nlog_2n)

2.希尔排序代码

void shellSort(SortTable *table) {for (int gap=table->len/2;gap>0;gap/=2) {for (int i=gap;i<table->len;i++) {Element temp=table->data[i];int j;for (j=i;j>=gap&&temp.key<table->data[j-gap].key;j-=gap) {table->data[j]=table->data[j-gap];}table->data[j]=temp;}}
}

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

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

相关文章

Webpack 核心配置与最佳实践指南

Webpack 是现代前端工程化的核心工具,理解其配置原理和优化技巧对开发效率至关重要。 一、Webpack 基础架构 1、核心概念关系图 2、核心概念详解 概念 作用 示例配置 Entry 应用入口起点 entry: ‘./src/index.js’ Output 编译结果输出位置 output.path: path.resolve(__d…

GISBox私有云+SaaS:安全协同的地理智能平台

一、概述 GISBox&#xff08;GIS 工具箱&#xff09;是一套能够对GIS 影像、地形、倾斜摄影进行场景编辑、切片转化、分发服务的 GIS 工具箱。同时&#xff0c;GISBox还支持私有云并一键开启SaaS服务。 二、什么是私有云&#xff1f; 私有云服务是一种为企业或组织量身定制的…

代理人工智能的隐藏威胁

代理型人工智能的自主性令人兴奋&#xff0c;但事实并非如此。主动性越高&#xff0c;不可预测性就越强&#xff0c;这为严重的、往往被忽视的安全风险打开了大门。从指令劫持到数字供应链的连锁故障&#xff0c;代理型人工智能不仅智能&#xff0c;而且在不受控制的情况下非常…

SonarQube 扫描多个微服务模块

SonarQube 扫描多个微服务模块 在使用 SonarQube/SonarCloud 扫描多个微服务模块时&#xff0c;核心目标是​​确保每个微服务模块被独立分析​​&#xff0c;并在 SonarQube 界面中以独立项目展示结果。以下是具体实现方案&#xff0c;分场景说明&#xff1a; ​​一、前提条…

当前主流且经过市场验证的开源 BI 系统推荐

以下是当前主流且经过市场验证的开源 BI 系统推荐&#xff0c;结合技术特性、适用场景和行业实践&#xff0c;为不同需求提供针对性解决方案&#xff1a;一、综合型开源 BI 平台1. Apache Superset&#xff08;Apache 2.0 协议&#xff09;核心优势&#xff1a;全场景覆盖&…

第05章 排序与分页

1.排序数据 1.1 排序规则 1.2 单列排序 1.3 多列排序 2.分页 2.1 背景 背景1:查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢? 背景2:表里有 4 条数据,我们只想要显示第 2、3 条数据怎么办呢? 2.2 实现规则 分页原理:所谓分页显示,就是将数据…

第4章 程序段的反复执行4.2while语句P128练习题(题及答案)

&#xff08;&#xff08;1&#xff09;阅读程序#include <bits/stdc.h> using namespace std; //汤永红 int main(){int n,s0;cin >> n;while(n){s s * 10 n % 10;n / 10;}cout << s << endl;return 0; }分别输入&#xff1a;0 1024 1234567890输出…

Linux下管道的实现

1.温故知新在上一篇博客我们知道了动态库是怎么样进行链接的&#xff0c;我们知道我们的.o文件&#xff0c;可执行文件都是我们的ELF格式的文件&#xff0c;是ELF文件&#xff0c;里面就有ELF header&#xff0c;程序头表&#xff0c;节&#xff0c;还有节头表&#xff0c;我们…

光猫、路由器和交换机

光猫&#xff1a;全称为光调制解调器&#xff0c;负责光信号与电信号的转换。在光纤入户的网络环境中&#xff0c;运营商通过光纤传输光信号&#xff0c;光猫将其转换为电脑、路由器等设备能识别的电信号&#xff0c;反之亦然。它是用户端与运营商网络之间的桥梁&#xff0c;保…

从零开始理解编译原理:设计一个简单的编程语言

编译原理是计算机科学的核心领域之一&#xff0c;它研究如何将高级编程语言转换为目标机器能够执行的代码。对于许多开发者来说&#xff0c;编译原理可能是一个神秘而复杂的领域&#xff0c;但实际上&#xff0c;通过系统的学习和实践&#xff0c;我们可以逐步掌握其核心概念和…

年轻新标杆!东方心绣脸韧带年轻技术升级发布

年轻新标杆&#xff01;东方心绣脸韧带年轻技术升级发布近日&#xff0c;“东方心绣脸韧带年轻品项升级发布会”圆满落幕。本次发布会聚焦现代女性面临的衰老困扰&#xff0c;正式推出技术升级成果——“韧带年轻”品项&#xff0c;旨在通过更科学的方案&#xff0c;助力求美者…

qt文件操作与qss基础

文章目录qt文件操作文件概述文件读写文件属性界面优化qss基础选择器的用法结语很高兴和大家见面&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01;&#xff01; 作者&#xff1a;٩( ‘ω’ )و260 我的专栏&#xff1a;qt&#xff0c;Li…

spring.config.import 不存在

确认spring.config.import的语法是否正确根据Spring Cloud的官方文档&#xff0c;该属性的值应该指向配置信息&#xff0c;例如对于Nacos配置中心&#xff0c;其格式通常为&#xff1a;spring:config:import: nacos://<nacos-server-addr>/<data-id>?group<gro…

kettle插件-kettle MinIO插件,轻松解决文件上传到MinIO服务器

场景&#xff1a;周二下班刚下地铁的时候有一位大佬&#xff0c;咨询kettle是否可以适配MinIO&#xff0c;功能要实现将图片或者base64通过kettle直接上传到MinIO服务器。接到需求&#xff0c;沟通需求&#xff0c;开干。经过3天左右研发和调试MinIO插件已经成功交付&#xff0…

套接字编程UDP

1.创建套接字int socket(int domain, int type, int protocol);第一个参数&#xff0c;底层用的ip报文统一使用的网络协议都是AFIN第二个参数&#xff0c;面向流的传输协议SOCK_DGRAM&#xff08;数据报套接字类型&#xff09;&#xff1a;支持数据报&#xff08;无连接、不可靠…

计算机网络:如何判断B或者C类IP地址是否划分了子网

要判断B类或C类IP地址是否划分了子网,核心在于通过子网掩码分析其网络位长度是否超过该类地址的默认网络位长度。以下是具体的判断方法和细节说明: 一、基础概念:IP地址类别与默认网络位 IP地址分为A、B、C三类(常用),每类地址的默认网络位长度(即未划分子网时,用于标…

智慧农业温室大棚物联网远程监控与智能监测系统

一、痛点破局&#xff1a;从“靠天吃饭”到“知天而作”传统温室大棚管理依赖人工巡检与经验判断&#xff0c;存在三大核心痛点&#xff1a;数据孤岛&#xff1a;温湿度、光照、CO₂浓度等关键参数分散于不同设备&#xff0c;难以实时整合分析&#xff1b;响应滞后&#xff1a;…

PID学习笔记1

在学习江协科技PID课程时&#xff0c;做一些笔记&#xff0c;对应视频1-4&#xff0c;对应代码&#xff1a;02&#xff0c;03&#xff0c;04&#xff0c;0502-位置式PID定速控制main.c:#include "stm32f10x.h" // Device header #include "Del…

C++入门学习3

10.类和对象 C语言结构体中只能定义变量&#xff0c;在C中&#xff0c;结构体内不仅可以定义变量&#xff0c;也可以定义函数。 C中定义类&#xff08;结构体&#xff09;的语法&#xff1a; class className {// 类体&#xff1a;由成员函数和成员变量组成}; // 一定要注意…

奇偶校验码原理与FPGA实现

奇偶校验原理与FPGA实现写在前面一、基础原理2.1 奇校验2.2 偶校验2.3 缺点二、举个例子3.1 奇校验例子3.2 偶校验例子3.3 检测出错例子三、FPGA实现写在后面写在前面 奇偶校验码是一种简单的检错码&#xff0c;主要用于数据传输或存储过程中检测奇数个比特错误或者偶数个比特错…