排序总结(一)

一锅排序之第一碗——插入排序 直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。 其实在生活中,我们身边有很多的类似直接插入排序的例子,比如,玩扑克的时候,我们就采用了直接插入的方法,我们摸牌的时候是一张一张的摸,每摸一张就会在原来有序的基础上把它插入到相应的位置,继续保持有序。 ... 阅读详情

各种排序的性能总结
这里写图片描述
一:冒泡排序
原理:原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束。冒泡排序对n个项目需要O(n^2)的比较次数,且可以原地排序。尽管这个算法是最简单了解和实现的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。
例子:
元数据:1,5,7,6,4,8
第一趟排序:1,5,6,4,7,8
第二趟排序:1,5,4,6,7,8
第三趟排序:1,4,5,6,7,8
代码:

 public static void bubbleSort(int[] arr) {
        if (arr == null || arr.length < 2) {//如果数组元素为空或小于2 ,返回
            return;
        }
        for (int i = arr.length - 1; i >= 0; i--) {//每次排完一次元素后,待排元素减1
            for (int j = 0; j < i; j++) {
                if (arr[j] > arr[j + 1]) {
                    swap(arr, j, j + 1);
                }
            }
        }
    }`

二:选择排序
原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

例子:

元数据:5,1,6,2,7,4

第一趟排序:1,5,6,2,7,4

第二趟排序:1,2,6,5,7,4

第三趟排序:1,2,4,5,7,6

第四趟排序:1,2,4,5,7,6

第五趟排序:1,2,4,5,6,7

代码:

public static void selectSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        int mini = 0;
        for (int i = 0; i < arr.length - 1; i++) {
            mini = i;//每次默认第一个元素是最小的
            for (int j = i + 1; j < arr.length; j++) {
                mini = arr[mini] > arr[j] ? j : mini;//如果有比min元素小的,min指改变
            }
            swap(arr, i, mini);//把min值和第i个元素交换
        }
    }
一文学懂经典算法系列之:快速排序 本文关键字:经典算法、排序算法、交换排序、快速排序、算法实践。快速排序是冒泡排序的改进算法,主要思想是在待排序列中取一个元素(通常为第一个)作为参照,将序列分为两个子序列,比参照值小的元素和比参照值大的元素各自组成一个子序列。每趟排序会使参照元素归位,并得到两个子序列。在子序列中继续执行该步骤,直到子序列的长度为0或1。... 阅读详情

相关推荐

33、一阶可满足性中的非循环排序

本博文探讨了一阶可满足性问题中基于非循环排序的高效推理方法。文章介绍了如何通过构建排序依赖图识别非循环排序,并结合扁平化转换和函数消除技术,将子句集转化为EPR片段以支持有限模型查找。此外,文章提出了排序受限的扁平化和迭代扁平化方法,以减少不必要的复杂性,提升推理效率。实验基于iProver系统和TPTP库,展示了该方法在多个实际领域中的有效性。

sss66的博客 75

排序算法(一)冒泡排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 以将数组 number[n] 中的n个数从小到大排序为例: 第一趟,比较number[0] 和 number[1] 的大小,如果 number[0] &gt...

lls60s的博客 306

浅谈IC测试向量(pattern)及其转换

随着集成电路的飞速发展,其规模越来越大,对电路的质量与可靠性要求进一步提高,集成电路的测试方法也变得越来越困难,为了实现芯片的快速测试和筛选,ATE设备为其提供了强有力的支撑。ATE运用芯片设计仿真文件,将其作为芯片输入激励,通过ATE测试平台提供芯片测试环境,将芯片的输出和测试结果进行比较,以此来判定芯片的好坏。 说起IC测试,不得不说一下Pattern这个词,它中文的意思是模式。在图像处理中,这个词意思为图像的纹理特征,而在IC也即芯片测试行业,这个词实际上代表了需要测试芯片的时序特征。简单的说,在测

flomingo1的专栏 1万+

排序系列一:冒泡排序以及改进

最近想要重新学学C++的算法,就从排序开始搞了。接下来会更新各种排序的代码,代码绝对是可以成功运行的,直接复制粘贴就OK,欢迎大家关注。 第一篇肯定就是冒泡排序(bubblesort)了,注释可以说是很详细了,特别适合初学者。 //冒泡排序原理为相邻两个数互相比较,然后将较大的数放在右边,然后继续向右进行比较,最后把最大的数放在整组数的最右边 //然后循环,再将前n-1个数继续上面的排序,最...

l2014010671的博客 272

海康工业相机触发模式详解:软触发 vs 外触发,在C#里如何选与用?

本文深入解析海康工业相机的软触发与外触发模式,详细比较两者的特性差异、适用场景及C#实现方法。通过海康SDK配置指南和实战代码示例,帮助开发者掌握工业相机触发模式的选择与优化技巧,提升自动化检测系统的精确性和可靠性。

weixin_42635064的博客 555

Unity物理驱动3D汽车实现:从刚体控制到参数调优

在游戏开发中,刚体物理是实现真实物体运动与交互的核心技术。通过Unity的物理引擎,开发者可以模拟重力、碰撞、摩擦力等物理行为,为游戏世界注入真实感。其技术价值在于能够以符合物理规律的方式驱动游戏对象,避免穿墙、无视惯性等问题,从而提升游戏体验的真实性和沉浸感。这一原理广泛应用于角色控制、车辆模拟、物体破坏等场景。本文以3D小汽车为例,详细解析了如何通过Rigidbody组件施加力与扭矩,并利用C#脚本实现玩家输入逻辑,完成一辆可操控、能碰撞的物理驱动汽车。文中重点探讨了AddForce与角速度控制两种方案

weixin_34380948的博客 501

一张图搞定三大经典排序

三大经典排序,冒泡、选择、插入,一图对比之。

小微程序 1717

[Bug已解决] CUDA error 尽管 CUDA 可用且 GPU 受支持-通用排查 RuntimeError 解决方案

[Bug已解决] CUDA error 尽管 CUDA 可用且 GPU 受支持-通用排查 RuntimeError 解决方案

一键难忘的博客 2415

面试-排序-(一)交换排序

一、交换排序:两两比较待排序的关键字,并交换不满足次序要求的那些偶对,直到全部满足为止。 常见的交换排序有冒泡排序和快速排序 1.冒泡排序 1)过程:比较相邻元素,使关键字较小的元素交换至关键字较大的元素之上,使得经过一次冒泡排序后,关键字最小的元素到达最顶端,接着找到第二小的元素,依次类推。 冒泡排序示意图 2)python实现: def sort1(a): lengt...

phyllisyuell的博客 359

杰理AC695N系列芯片 LED7数码管使用教程

杰理AC695N数码管使用摘要 本教程介绍了杰理AC695N芯片驱动LED7数码管的实现方法: 硬件配置:支持7/12/13脚三种数码管类型,详细说明了7脚数码管的标准段码定义和GPIO接线方式。 软件设置: 通过修改配置文件启用LED7功能 配置GPIO引脚映射(PORTC/PORTA组) 选择与硬件匹配的真值表 层次架构:包含硬件层、驱动层、UI层和应用层的完整设计,支持数字、字符和图标显示功能。 实现要点包括正确配置引脚类型、选择真值表,并通过UI风格设置为LED7模式。

qq_42014563的博客 1345

多周期路径约束(set_multicycle_path )

1.由慢到快的多周期约束 如下图所示,发射时钟周期是接受时钟周期的4倍。默认情况下,按照1T原则来进行静态时序分析和布局布线的。即建立时间是在发射沿后的第一个捕获沿检查,而保持时间是同一时刻下源时钟和捕获时钟的触发边沿下检查的(建立时间检查边沿的前一个触发沿)。 但是这样导致的问题就是该路径过于苛刻,为了满足这条路径的要求,不得不放弃其他路径。或者根本没办法保证这个默认的约束。总之最终造成...

Arist. 5506

算法【排序一】

算法系统学习首篇之排序 排序在商业数据处理和现代科学计算中的重要性不言而喻。它能够应用于日常事物处理、组合优化、天体物理学、分子动力学、语言学、基因组学、天气预报和其他相关领域。 20世纪科学与工程领域的十大算法之一就是一种排序算法——快速排序。 在标准库中已经实现排序函数,再学习排序算法仍有重要实际意义。再重温排序算法之前,我并没有意识到。 对排序算法的分析将有助于全面理解比较算法性能的...

沧海桑田 255

uniapp+google map不显示

uniapp+renderJS+google map开发安卓版APP非小程序,google map小叉号不显示,google map自定义marker右上角的小叉号如何去掉,uniapp+google map不显示

renkai721的专栏 526

Golang对某一字符串排序

方法一: 首先,字符串转为[]byte, 对切片排序, 最后切片转字符串 str := "eat" b := []byte(str) sort.Slice(b, func(i, j int) bool { return b[i] < b[j] }) str = string(b) 方法二: 首先字符串分割,得到字符串切片, 对切片排序, strings.join连接成新的字符串 func sortString(str string) string { split := strings

Mark66890620 1434

Android Input——输入系统介绍(一)

Input 系统对于提供流畅、灵敏和一致的用户交互体验至关重要,它需要在不同的设备、场景和应用中保证输入事件的正确性、及时性和安全性。Android 输入系统是一个复杂但高效的设计,旨在处理来自各种输入设备(如触摸屏、键盘等)的用户交互,并将这些交互转换为应用程序可以理解和响应的形式。EventHub:输入系统的最底层,直接与硬件通信,监听和读取输入设备的原始事件。:从 EventHub 获取原始输入事件,对其进行解析,转化为更高层次的事件,以便上层应用或服务能够理解。

小旭的专栏 1710

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

php 根据数组中的某一字段进行排序

php 根据二维数组中的某一字段进行排序: $dataArr = [ '0' = [ 'code' => 'hfvdp', 'status' => 0, ], '1' = [ 'code' =>...

Light 6021

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

排序(一)之冒泡排序

冒泡排序原理: 第一个元素与第二个元素比较,如果第一个元素大,与第二个交换; 第二个元素与第三个元素比较,如果第二个元素大,与第三个交换; .... 第一次循环,找出最大值 ... 第二次循环,找出次最大值 图示如下: 代码如下: @Test public void b...

徐海兴的专栏 1100

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

算法一看就懂之「 冒泡排序 」

内容来自:不止思考上一篇文章「 排序算法 」已经整体的把排序算法的分类和评估方法介绍了一下,今天起咱们就开始依次介绍一下各种排序算法的原理和特性。咱们就从最容易理解的「 ...

Java笔记虾 1157

排序算法总结(一)

文章目录基本概念排序算法的稳定性分类内部排序插入排序直接插入排序希尔排序交换排序冒泡排序快速排序今日推歌 基本概念 排序算法的稳定性 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。 分类 内部排序:数据都在内存中(关注如何使得算法的时间空间复杂度更低) 外部排序:数据太多,无法全部放入内存中,需要将待排

星回昭以烂的博客 326

排序 一

东西忘了好多,重新来过。 今天搞排序。算是三个比较简单的吧。 1,选择排序:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 代码的实现:#include&lt;stdio.h&gt; main() { int i,min,t,j; int num...

hahahahusky的博客 386

C语言各种排序算法的总结(一)

对C语言各种排序算法的总结 相信很多同学对排序算法都有了不同程度的理解,这篇文章仅仅是为了总结一些常用的排序算法的原理,追求更加深入的理解这些排序算法的实现原理,更加细致地去理解代码为什么要这么个写法。深入地去理解这些算法的实现方式,其实会发现这其中有许多的乐趣。 一.常用排序算法的种类及其时间复杂度 种类 时间复杂度 选择排序法 O(n^2) 冒泡排序法 O(n^2) 插入排序法 O(n^2) 希尔排序法 O(nlog2n) 归并排序法 O(nlog2n) 快速排序法

m0_50375824的博客 865

Dynamo中对构件通过某一规律排序

启用 Python 支持和加载 DesignScript 库 import clr clr.AddReference(‘ProtoGeometry’) from Autodesk.DesignScript.Geometry import * 该节点的输入内容将存储为 IN 变量中的一个列表。 dataEnteringNode = IN 将代码放在该行下面 sortNums=IN[0] elements=IN[1] #通过(用于编码的值,编码模型,是否反转从小到大或者从大到小)进行模型编码 def sortE

Princetoid的博客 1533

SQL:按某字段排序,若该字段值为null,用另一字段排序

SQL:按某字段排序,若该字段值为null,用另一字段排序. 问题产生原因:群友遇到的睿智产品经理整活。 先上sql: SELECT * FROM test ORDER BY IFNULL(updateTime, createTime) DESC; 表如下: 结果如下:

徒手千行代码无bug 1356

排序 (一)

1.排序算法可以分为内部排序和外部排序。内部排序是数据记录在内存中进行排序。而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:选择排序、冒泡排序、插入排序、快速排序、希尔排序、归并排序、堆排序、基数排序等 2.各类排序的稳定性:可以通过观察数据是否有跳跃性移动来判断 稳定的排序算法:冒泡排序,插入排序,归并排序和基数排序 不稳定的排...

Monster7559的博客 301

排序一

文章目录1.插入排序2. 堆排序最小堆最大堆堆排序3. 计数排序4. 桶排序 转自菜鸟教程 1.插入排序 算法 首先将序列的第一个元素看作有序序列,把第二个元素到最后一个元素当作未排序序列 从头到尾依次扫描未排序的序列 将扫描到的元素和有序序列依次从后向前比较,如果有序序列的数值较大,移动到有序序列的后一个位置 直到有序序列的元素小于等于扫描到的元素,将扫描到的元素插入有序序列 例如...

虎哥的铲屎员 200

排序(一) 简单交换排序

排序(一) 简单交换排序   by斜风细雨QQ:253786989    2012-02-01 样例代码: // 简单交换排序 int data[9] = {8, 2, 1, 4, 9, 5, 7, 3, 6}; for (int i = 0; i < 9; ++i) { for (int j = i+1; j < 9; ++j) { if

斜风细雨 2597
上一篇: java反射分析
下一篇: 排序总结(二)
付家明1
博客等级 码龄14年 0粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值