当前位置: 首页 > news >正文

排序概念以及插入排序

一、排序基本概念

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;}}
}

http://www.lryc.cn/news/615356.html

相关文章:

  • Oracle字段操作
  • (nice!!!)(LeetCode 面试经典 150 题) 146. LRU 缓存 (哈希表+双向链表)
  • 在 Vue 中动态引入SVG图标的实现方案
  • STM32 外设驱动模块四:光敏电阻(LDR) 模块
  • 後端開發技術教學(四) 數據交互延伸
  • 2025年渗透测试面试题总结-09(题目+回答)
  • 力扣(轮转数组)
  • 欧拉公式的意义
  • gpt-oss 全量技术解读
  • AI鉴伪技术:守护数字时代的真实性防线
  • 数学学习 | 高数、线代、概率论及数理统计荐书
  • 【C++】set
  • AI热点周报(8.3~8.9):OpenAI重返开源,Anthropic放大招,Claude4.1、GPT5相继发布
  • 第二十八天(cookiesessiontokeny验证)
  • 李宏毅深度学习教程 第16-18章 终身学习+网络压缩+可解释性人工智能
  • STM32学习笔记6-TIM-2输出比较功能
  • 《汇编语言:基于X86处理器》第12章 复习题和练习
  • [每周一更]-(第155期):深入Go反射机制:架构师视角下的动态力量与工程智慧
  • 元宇宙技术如何改变社交方式?
  • (第三篇)spring cloud之Zookeeper注册中心
  • Go 实用指南:如何执行 Skyline 查询(Pareto 最优点筛选)
  • 图片拆分工具,自定义宫格切割
  • 在Spring Boot项目中如何动态切换数据源、数据库?
  • java -jar xxx.jar 提示xxx.jar中没有主清单属性报错解决方案
  • 【Git】Visual Studio 实现合并分支
  • Alibaba Cloud Linux 3 安装 git
  • DigitalProductId解密算法php调试版piddebug.php
  • n8n飞书webhook配置(飞书机器人、飞书bot、feishu bot)Crypto节点、js timestamp代码、Crypto node
  • AG32cpld实现一个UartTx“外设”
  • Kafka服务端NIO操作原理解析(二)