各种排序比较

2023-11-11

直接插入排序

void InsertSort(ElemType A[], int n){
	int i, j;
	for(i = 2; i <= n; i++)           //依次将A[2]~A[n]插入到前面已排序序列
		if(A[i].key < A[i-1].key){    //若A[i]的关键码小于其前驱,需将A[i]插入有序表
			A[0] = A[i];         //复制为哨兵,A[0]不存放元素
			for(j = i-1; A[0].key < A[j].key; --j)   //从后往前查找待插入位置
				A[j+1] = A[j];    //向后挪位
			A[j+1] = A[0];     //复制到插入位置
		}
}

 

冒泡排序

void BubbleSort(int a[], int n){
	int i = n - 1; //初始时,最后位置保持不变
	while(i > 0){
		int pos = 0;   //每趟开始时,无记录交换
		for(int j = 0; j < i; j++)
			if(a[j] > a[j+1]){
				pos = j;   //记录交换位置
				int tmp = a[j];
				a[j] = a[j+1];
				a[j+1] = tmp;
			}
		i = pos ;  //为下一趟排序作准备
	}
}

 

快速排序

int Partition(ElemType A[], int low, int high){
	//划分算法(一趟排序过程)
	ElemType pivot = A[low];     //将当前表中第一个元素设为枢轴,对表进行划分
	while(low < high){     //循环跳出条件
		while(low < high && A[high] >= pivot) --high;
		A[low] = A[high];    //将比枢轴值小的元素移到左端
		while(low < high && A[low] <= pivot) ++low;
		A[high] = A[low];    //将比枢轴值大的元素移到右端
	}
	A[low] = pivot;     //枢轴值元素存放到最终到最终位置
	return low;         //返回存放枢轴的最终位置
}

void QuickSort(ElemType A[], int low, int high){
	if(low < high){    //递归跳出的条件
		//Partition()就是划分操作,将表A[low...high]划分为满足上述条件的两个子表
		int pivotpos = Partition(A, low, high);   //划分
		QuickSort(A, low, pivotpos-1);    //依次对两个子表进行递归排序
		QuickSort(A, pivotpos+1, high);
	}
}

 

简单选择排序(直接选择排序)

(1)

void SelectSort(ElemType A[], int n){
	//对A作简单选择排序,A[]从0开始存放元素
	for(int i=0;i<n-1;i++){
		min=i;
		for(int j=i+1;j<n;j++)
			if(A[j]<A[min]) min=j;
		if(min!=i) swap(A[i],A[min]);
	}
}

(2)

int SelectMinkey(int a[],int n,int i){
	//数组最小值
	int k=i;
	for(int j=i+1;j<n;++j)
		if(a[k]>a[j]) k=j;
	return k;
}
void SelectSort(int a[],int n){
	int key,tmp;
	for(int i=0;i<n;++i){
		key=SelectMinkey(a,n,i); //选择最小的元素
		if(key!=i){
			tmp=a[i];
			a[i]=a[key];
			a[key]=tmp;
		}
	}
}

 

 

记忆口诀:

(1)稳定性:心情不稳定快些选好友来聊天吧

          快指快速排序,些(希)指希尔排序,选指选择排序,堆指堆排序,这4个排序是不稳定的。

(2)时间复杂度:快些nlog(2,n)的速度归队

          快指快速排序,些(希)指希尔排序,归指归并排序,队(堆)指堆排序,这4个排序的时间复杂度为nlog(2,n),其他均              为O(n^2)(基数除外,为O(d(n+r)))。

(3)空间复杂度:快归基除外为O(1)

          快是log(2,n),归是n,基是r。

 

经过一趟排序,能保证一个元素到达最终位置,有交换类(冒泡排序,快速排序)和选择类(简单排序、堆排序)排序,即插入类排序不可得到最终位置。

排序方法的元素比较次数与原始序列无关的有简单选择排序。

排序方法的排序趟数与原始序列有关的有交换类(冒泡排序,快速排序)排序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

各种排序比较 的相关文章

  • Ubuntu 18.04 安装Tensorflow遇到的问题

    问题一 Tensorflow安装完成后测试时 出现libcublas so 9 0找不到问题 ImportError libcublas so 9 0 cannot open shared object file No such file
  • uni-app 数据上拉加载更多功能

    实现上拉加载更多 打开项目根目录中的 pages json 配置文件 为 subPackages 分包中的商品 goods list 页面配置上拉触底的距离 subPackages root subpkg pages path goods
  • 线程的同步和互斥

    线程的同步和互斥题目 题目 设计生产者与消费者模型 缓冲区是一个大小为10的环 每个生产者产生一个0 1000的随机整数 存放在环空位中 消费者从环中取数据 并输出 一个生产者或消费者对应一个线程 要避免 1 两个生产者同时向环的同一个位置
  • 两个数组找相同元素_leetcode数组--sort排序题目汇总

    概要 此类题目的特点是会遇到一些杂乱无序的数组 经过排序后 会更好处理 1051 高度检查器 学校在拍年度纪念照时 一般要求学生按照 非递减 的高度顺序排列 请你返回能让所有学生以 非递减 高度排列的最小必要移动人数 注意 当一组学生被选中
  • qrcode页面生成二维码

  • 2.使用服务端SDK

    使用服务端SDK 一 服务端SDK 1 简介 2 功能介绍 二 使用SDK 1 安装 2 初始化 3 创建测试类 三 创建测试用例 1 获取视频播放凭证 2 获取视频播放地址 一 服务端SDK 1 简介 sdk的方式将api进行了进一步的封
  • 人工智能的道德与伦理

    人工智能的道德与伦理 对人工智能的研究始于上世纪50年代 近几年 科学界和产业界对它的兴趣超越了以往 最近一年半来 谷歌收购了十几家机器人公司 并正在开发人工智能的一个图腾 无人驾驶汽车 去年 社交媒体脸谱成立了新的人工智能实验室 数据显示
  • 技术架构演进之路-Docker【二】

    docker 技术架构演进之路 了解每种技术架构以及如何演进的 熟悉Docker在架构中的核心作用 八大架构演进 一 单机架构 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 img 9o2adujk 168437644
  • vue axios全攻略

    不再继续维护vue resource 并推荐大家使用 axios 开始 axios 被越来越多的人所了解 本来想在网上找找详细攻略 突然发现 axios 的官方文档本身就非常详细 有这个还要什么自行车 所以推荐大家学习这种库 最好详细阅读其
  • Linux应用编程

    进程控制 fork函数 函数说明 创建一个子进程 函数原型 pid t fork void 返回值 失败返回 1 成功返回 父进程返回子进程的ID 非负 子进程返回 0 pid t类型表示进程ID 但为了表示 1 它是有符号整型 0不是有效
  • 23种设计模式 之 State模式(状态模式)[C语言实现]

    一 概念定义 State模式 允许一个对象在其状态发生改变时 改变它的行为 State模式和Strategy模式非常相似 需要说明的是两者的思想是一致的 只不过封装的对象不同 State模式封装的是不同的状态 而Strategy模式封装的是
  • mssql sqlserver 指定特定值排在表前面

    摘要 这是一篇来自 猫猫小屋 的按特定值的排序位置的文章 下文讲述sql脚本编写中 将 特定值排在最前面的方法分享 实验环境 sqlserver 2008 R2 例 将数据表中指定值为0的行排在最前面呈现给用户 create table t
  • top命令按内存和cpu排序

    一 按进程的CPU使用率排序 运行top命令后 键入大写P 有两种途径 a 打开大写键盘的情况下 直接按P键 b 未打开大写键盘的情况下 Shift P键 效果如图 二 按进程的内存使用率排序 运行top命令后 键入大写M 有两种途径 a
  • 判断BigDecimal是否为null

    开发中的小总结 在开发中如果对BigDecima做赋值操作的时候就需要事先对BigDecima做是否为null的校验不然程序会报空指针异常 if BigDecima null BigDecima的初始化
  • python —函数的说明文档、作用域以及嵌套和闭包

    一 函数的说明文档 给函数中得代码做解释说明 用三个引号包括 def a 定义一个函数 a 设定内容 b 同 for循环的range函数 使内容 b 循环200次 return b 你好世界 for i in range 200 print
  • kafka入门,提高生产者吞吐量练习(七)

    修改配置Java batch size 批次大小 默认16k linger ms 等待时间 修改为5 100ms compression type 压缩snappy RecordAccmulator 缓冲区大小 修改为64m 代码例子 pa
  • 14个UI精美功能强大的Android应用设计模板

    由于狂热的开发者社区和移动设备的日益普及 Android的商业应用程序成为一个不断增长的市场 因此 毫不奇怪 业务应用程序模板也有需求 因为它们有助于减少编码的一些繁琐部分 并允许开发人员专注于更专业的工作 这篇文章从各大知名的模板网站中找
  • Git 创建新工程流程

    git status 查看状态 确保文件都是干净的 git branch a 查看所有分支 git pull 同步到最新的代码 git checkout b branchname 创建并切换新分支 git push set upstream

随机推荐

  • python入门笔记--常见函数总结(重要)

    help 函数名 可以查看函数的用法 1 lambda定义函数 2 map 函数 生成新序列 map 的功能是将函数对象依次作用于序列的每一个元素 每次作用的结果储存于返回的序列中 将序列1中的每个元素 3生成新序列 将两个序列的每个元素相
  • 使用G2O库时编译错误

    编译时出现如下错误 CMake Error at CMakeLists txt 11 find package By not providing FindG2O cmake in CMAKE MODULE PATH this project
  • python3(十一)内置模块和类型转换

    内置模块 不用import就可以直接使用 常用内置函数 命令 作用 help obj 在线帮助 obj可是任何类型 callable obj 查看一个obj是不是可以像函数一样调用 repr obj 得到obj的表示字符串 可以利用这个字符
  • 初识PE文件结构

    前言 目前网络上有关PE文件结构说明的文章太多了 自己的这篇文章只是单纯的记录自己对PE文件结构的学习 理解和总结 基础概念 PE Portable Executable 可移植的执行体 是Win32环境自身所带的可执行文件格式 它的一些特
  • MySQL开机无法启动,需手动启动才可以。

    环境 Window10 戴尔笔记本 问题 每次机器重启 MySQL的服务都没有开起来 查看服务 确认已将MySQL的服务设为自动启动 原因 Windows服务管理器对所有服务的状态进行管控 服务管理器会等待服务就绪 这个时间默认为60秒 然
  • c#二值化特征相关提取

    using System using System Collections Generic using System Linq using System Text using System Threading Tasks using Ope
  • 编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别

    最近在研究Python和Erlang 反复提到动态类型语言 动态语言 解释型语言这些概念 这些概念很生涩 在这里做一个总结 编译型语言和解释型语言 1 编译型语言 需通过编译器 compiler 将源代码编译成机器码 之后才能执行的语言 一
  • C# vs2012中 -- 不可访问,因为它受保护级别限制

    最近开始学习 C 现在再学习里面的迭代器 在网上找了个例子 但是弄来有问题 在 class IterationSampleEnumerator 里面的values和startingPrint 会提示不可访问 因为它受保护级别限制问题代码 u
  • 使用django_celery_beat在admin后台配置计划任务

    一 依赖包的安装 django中使用celery做异步任务和计划任务最头疼的点就是包之间版本兼容性问题 项目一启动花花报错 大概率都是版本问题 每次都会花很大时间在版本兼容性问题上 本例使用如下版本 Django 3 2 celery 5
  • ubuntu18.04虚拟机无法发现ADB设备解决办法

    bell r311 r311 android adb shell error insufficient permissions for device user in plugdev group are your udev rules wro
  • [现代控制理论]7_线性控制器设计_Linear Controller Design

    现代控制理论 11 现代控制理论串讲 完结 pdf获取 现代控制理论 10 可观测性与分离原理 观测器与控制器 现代控制理论 9 状态观测器设计 龙伯格观测器 现代控制理论 8 5 线性控制器设计 轨迹跟踪simulink 现代控制理论 8
  • elementUI中的滚动条

    elementUI中的滚动条
  • 基于Python的 LSTM模型,更加精准的时间序列预测

    来源 DeepHub IMBA 大家经常会遇到一些需要预测的场景 比如预测品牌销售额 预测产品销量 今天给大家分享一波使用 LSTM 进行端到端时间序列预测的完整代码和详细解释 我们先来了解两个主题 什么是时间序列分析 什么是 LSTM 时
  • vm虚拟机安装centos7后的网络设置

    虚拟机网卡设置为桥接模式 安装完centos7后 root登陆 vi etc sysconfig network scripts ifcfg ens33 如果是动态获取地址 BOOTPROTO dhcp 如果是设置静态地址 则 BOOTPR
  • html 跨域_跨域方案总结

    平时在开发中总是会遇到各种跨域问题 一直没有很好地了解其中的原理 以及其各种实现方案 今天在这好好总结一下 本文完整的源代码请猛戳 xiangxingchen blog github com 博客 建议大家动手敲敲代码 1 什么是跨域 为什
  • MATLAB使用技巧笔记

    1 遍历查询 find的效率要高于for循环的效率 2 return 直接退出程序或函数返回了 3 keyboard 通常应用在Debug模式下面 所以你的程序不是为了debug 请使用input函数 也就是说 我可以进行新的参数赋值等 这
  • 将html文件设置为安卓背景桌面,WinXP下将HTML文档设置为屏保的方法

    WinXP的屏幕保护程序多种多样 很多用户喜欢将一些自己的文档图片等设为屏保 今天我们要向大家介绍的是另一种新方法 将HTML文档设置为屏保 下面大家跟随小编一起设置吧 WinXP系统除将HTML文档设置为桌面背景之外 WinXP的活动桌面
  • 动态平衡网格交易_网格交易 套利:期货经典书籍

    期货市场技术分析 墨菲 这是一部技术分析的工具书 教科书 本书涵盖了技术分析自道氏以来所有重要的研究成果 因此 是期货交易者的入门必读书目之一 我在 货的前几年也至少读了三遍以上 日本蜡烛 图技术 尼森 蜡烛图是目前最常见的看盘的基本工具
  • 串口服务器的通讯模式

    串口服务器 一个为RS 232 485 422到PC IP之间完成数据转换的具有强大功能的方便快捷的通讯接口转换器 串口服务器通过作为服务器端 提供RS 232 485 422终端串口与TCP IP网络的数据双向透明传输 提供串口转网络功能
  • 各种排序比较

    直接插入排序 void InsertSort ElemType A int n int i j for i 2 i lt n i 依次将A 2 A n 插入到前面已排序序列 if A i key lt A i 1 key 若A i 的关键码