基于比较的排序(一)

【算法课程实验一】五种排序算法的分析比较 实验目的:掌握选择排序、冒泡排序、合并排序、快速排序、归并排序的算法原理分析不同排序算法的时间效率和时间复杂度,以及理论值与实测数据的对比分析。一、冒泡排序算法伪代码:for i=1 to n      for j=0 to n-i if ( data[j]>=data[j+1]) swap(data[j],data[j+1]... 阅读详情
前言
不得不先感慨一句,要努力写博客了,好言归正传,最近研究了数据结构,里面有涉及排序,总结总结,
内容

宏观

在这里插入图片描述
算法种类很多,主要介绍用于比较的排序

言归正传,开始介绍

就按照图上的顺序来吧

1.插入类排序–(直接插入,折半插入,希尔排序) 这是插入排序的一个顺序,图有些丑,
在这里插入图片描述

直接插入排序

代码

public class sort {

    public  static void main(String[] args){
    int[] r = {0,2,3,1,5,4,6,8,9,10,7};
    sort sort1= new sort();
    sort1.insertSort(r,0 ,7);

    for (int i : r) {
            System.out.print(i+",");
        }

    }
    public void insertSort(int[] r, int low, int high) {
        // 从小到大
        for (int i = low + 1; i < r.length ; i++) {
            if (r[i] < r[i - 1]) {
                    int temp = r[i];
                r[i] = r[i - 1];
                int j = i - 2;
                for (;j >= low && temp < r[j]; j--) {
                    r[j + 1] = r[j]; // 记录后移
                }
//                while (j > low && temp < r[j]) {
//                    r[j + 1] = r[j];
//                    j--;
//                }
                r[j + 1] = temp;
                // 插入到正确位置
            }
        }
    }
}

代码强调以下问题
1.边界

外层循环:假设为十个数则循环9次
内层循环 从第二个数开始比较

2.时间复杂度

O(n²)

3.原理,

为插入算法,其原理是一种位置移动,而不是相互交换位置,(向有序区中插入值,插入值之后的数依次后移一位)

折半插入算法

代码(没写注释,~~不懂可以问,可以要求加注释)

public class BinaryInsertion {
    public static void main(String[] args) {
        int[] r = {0,2,3,1,9,10,7};
        BinaryInsertion binary = new BinaryInsertion();
        binary.binaryInsertion(r,0,7);
        for (int i : r) {
            System.out.print(i+",");
        }
    }

    public void binaryInsertion(int[] r, int low, int high) {
        for (int i = low + 1; i < r.length; i++) {
            int temp = r[i];
            int hi = i - 1;
            int lo = low;
            while (lo <= hi) {
                int mid = (lo + hi) / 2;
                if (temp < r[mid]) {
                    hi = mid - 1;
                } else {
                    lo = mid + 1;
                }
            }
            for (int j = i - 1; j >= lo; j--) {
                r[j + 1] = r[j];
            }
            r[hi + 1] = temp;
        }
    }
}

代码强调以下问题
1.边界

1.比较过程中lo会是high的后一位
2.外层循环时不能等于数组长度,会溢出
3.中间值一般是向下取整的
2.时间复杂度 : O(n²)

3.原理,

折半插入之后会缩小比较的范围,插入时依然需要插入点之后的数值依次后移 ?

希尔排序

代码(直接插入的升级版,步长可以自定义)

public class shellsort {
    public static void main(String[] args){
        int[] r = {0,5,2,3,1,10,6,4,7,8};
        // 自定义了一个数组,5为第一次的步长,1为第二次的步长
        int[] delta = {5,1};
        shellsort shell2=new shellsort();
        shell2.shell(r,0,9,delta);
        for (int i : r) {
            System.out.print(i+",");
        }
    }
    public void shell(int[] r, int low, int high, int[] delta){
    for(int k=0 ;k<delta.length;k++){
        shellInsert(r, low, high, delta[k]); //一趟步长为 delta[k]的直接插入排序
    }
    }
    private void shellInsert(int[] r ,int low, int high, int deltaK){
        for (int i=low+deltaK; i<=high; i++) {
            if (r[i] < r[i - deltaK]) { //小于时,需将 r[i] 插入有序表
                int temp = r[i];
                int j = i - deltaK;
                for (; j >= low && temp< r[j]; j = j - deltaK) {
                    r[j + deltaK] = r[j]; //记录后移
                }
                r[j + deltaK] = temp; //插入到正确位置
            }
        }
    }

}


代码强调以下问题
1.边界

待定
2.时间复杂度 : 待定
3.原理,

简单地说,除了步长不一样和直接插入是一样的哦, ?,在复杂一点点的话,就是,会按步长分组,每组内都是直接插入排序,直到按照步长为1的排完序就可以得到最终结果.

小结
感谢您的阅读~~
similarity network fusion for aggregating data types on a genomic scale 基因组规模上的聚合数据类型的相似性网络融合 摘要:         近期的技术已经使收集不同类型的全基因组数据十分划算,结合这些数据去创建一个给定的疾病或生物过程的一个全面视图的计算方法是有必要的。相似网络融合(SNF:similarity network fusion)通过创建每一个可利用的数据类型的样本(如,患者)的网络可以解决这个问题。例如,创建一个给定一群患者疾病的全面视图,SNF计算 阅读详情

相关推荐

零、HarmonyOS应用开发者基础学习总览

零、HarmonyOS应用开发者基础学习总览

weixin_45029825的博客 1455

基于比较的常见排序方式

几种常见的基于比较的排序方式 排序简介 交换排序 1.冒泡排序 思想: 两个相邻元素两两比较,依次向后,一趟确定一个元素位置。 说明: 冒泡排序有两层循环,第一层循坏是确定比较趟数,第二层循环确定元素位置,每确定一个元素的位置,检索数组长度减少一位。 实例: 这个数组其实第六趟已经有序了,但是程序还是会继续比较下去,因而可以设置一个状态值来判断数组是否已经有序,读者可以自行编写代码,这里不再展开。 代码: public void bubbleSort(int[] array){ for (int

m0_53120156的博客 2508

AUTOSAR R20-11标准下载!

这是公众号的第2篇推文,粉丝数49 Document Search Classic Platform Adaptive Platform Foundation 文档截图 以为会在明天的发布会之后才上线,没想到官网现在就悄悄放出来了。 中国由于网络问题,下载速度比较慢或者会中断。 “阅读原文”提供多种下载方式,可以在线浏览,可以集中下载也可单个文档下载。 如有增减我也会及时在公众号里通知大家,不过我觉得不会变动了。 整理不宜,好东西要分...

Adaptive_AUTOSAR的博客 1891

基于比较的七种常见排序算法

本文主要介绍基于比较的七种常见排序算法,分别为:选择排序法,插入排序法,希尔排序法,冒泡排序法,堆排序法,归并排序法,快速排序法。 基于比较的排序算法是指对于元素的排序必须是建立在元素之间是可以比较的。体现在 javajavajava​​​ 语言中为待排序的元素类型是实现了 ComparableComparableComparable​​​​​ 接口的类型。 本文所涉及的复杂度分析都是基于现有结论加上自己的简单的理解,所以可能非常不严谨,大家看看就好,不过最终的结论都是对的。 在分析复杂度的同时也对排序算法

weixin_48084293的博客 9932

Vivado实战:UltraScale/UltraScale+器件eFUSE寄存器配置与安全编程全解析

本文详细解析了Xilinx UltraScale/UltraScale+器件中eFUSE寄存器的配置与安全编程方法。从芯片唯一身份标识到加密密钥烧录,再到用户寄存器的灵活应用和安全控制寄存器的配置技巧,全面介绍了如何利用eFUSE功能提升硬件安全性。文章还提供了JTAG接口安全管理和NKZ文件备份方案,帮助开发者避免常见陷阱,确保安全编程的可靠性。

weixin_42535703的博客 429

Valeo近场数据集:多模态行人意图检测技术解析

行人意图检测是智能驾驶系统的关键技术,通过分析行人运动轨迹预测其行为意图。传统方法受限于单传感器数据,难以应对复杂场景。多模态融合技术结合视觉、LiDAR和惯性测量数据,显著提升检测精度。Valeo近场数据集(VNF)创新性地采用鱼眼相机、多LiDAR和动作捕捉系统,实现3D姿态与意图标签的精准对齐。该数据集支持开发距离自适应的行人感知算法,在ADAS防碰撞、智能迎宾等场景具有重要应用价值。关键技术包括传感器同步、3D姿态重建和时空图卷积网络,为行业提供了标准化评估基准。

weixin_30566111的博客 660

数据结构之排序算法学习笔记22-12-2

1、定义:排序就是重新排列数列中的元素,使其称为满足按关键字有序的序列。序列有序在实际应用中是非常重要的。简单举个例子来说,如果你要进行按值查找操作,那么有序的序列可以采取折半查找法,而无序的序列只能从头到尾依次查找(假定我们没有其他排序算法的知识基础)。2、算法的稳定性:举例说明,若有一个序列是(12 8 12* 1 4),此时我们可以看到表中有两个值为12的元素,为了方便,我们将一个12加上*来做区分。

weixin_53438051的博客 2636

VSCode终端打不开?3分钟搞定Windows下Terminal配置(附最新JSON设置方法)

本文针对Windows系统下VSCode终端无法启动的常见问题,提供了详细的诊断与解决方案。核心在于更新已弃用的旧配置,采用最新的JSON设置方法,通过定义`terminal.integrated.profiles.windows`和指定`terminal.integrated.defaultProfile.windows`,快速修复并优化终端配置,实现三分钟内恢复正常使用。

flower的专栏 743

《数据结构》-第八章 排序(习题)

第八章 排序 排序作为各类数据结构的相应的运算的一种,在很多领域中都有广泛的应用。主要的排序方法有插入排序、交换排序、选择排序、二路归并排序、基数排序、外部排序等各类排序方法。堆排序、快速排序和归并排序是本章的重难点,应深入掌握各种排序算法的思想、排序过程(能动手模拟)和特征(初态的影响、复杂度、稳定性、适用性等)。 本章同样作为考察重点章节,通常以选择题的形式考查不同算法之间的对比。此外,对于一些常用排序算法的关键代码,要达到熟练编写的程度:看到某特定序列,读者应具有选择最优排序...

大家一起进步叭 9262

【RT-DETR有效改进】为什么YOLO版本的RT-DETR训练模型不收敛精度差的问题

本文的内容同样为本专栏的前期预热文章,文章主要解释一下为什么有的人跑ultralytics仓库的RT-DETR精度很差,模型不收敛,mAP异常的情况。为了验证这一情况我也是跑了多个实验,从多个数据集出发,100-500的数据集我跑了大概5个数据集,1000的我跑了二个,2000的我跑了一个,4000的跑了一个,同时其中一些版本我也用了不同的batch_size来出发验证精度异常的情况。

Snu77的博客 9763

YOLO11实战优化:长尾分布解决 | 引入Seesaw Loss配合YOLO11分类头,完美应对类别极其不平衡的现实业务场景

摘要: YOLO11在工业缺陷检测等长尾分布场景中面临尾部类别检测失效的问题,根源在于头部类别样本的负样本梯度压制了尾部类别的学习。传统方法如重采样、Focal Loss等效果有限。Seesaw Loss通过动态调整缓解因子和补偿因子,平衡类别间的梯度分布,结合YOLO11的解耦分类头、Anchor-Free设计和C2PSA/C3K2模块,显著提升尾部类别识别能力。文章详细解析了Seesaw Loss的数学原理,并提供了可直接集成到YOLO11的PyTorch实现代码,为长尾分布下的目标检测提供了实用解决方

2601_95807009的博客 253

【数据结构】第七章 排序

1.排序基本概念 1.拓扑排序是将有向图中所有结点排成一个线性序列,虽然也是在内存中进行的,但它不属于这里所提到的内部排序范畴,也不满足前面排序的定义。 2.对于任意序列进行基于比较的排序,求最少的比较次数应考虑最坏情况。对任意n个关键字排序的比较次数至少为⌈log2(n!)⌉\lceil log_2(n!) \rceil⌈log2​(n!)⌉ 对任意7个关键字进行基于比较的排序,至少要进行几次...

sinat_33438008的博客 5018

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

排序算法总结1一比较排序

我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。   排序算法大体可分为两种:     一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。     另一种是非比较排序,时间复杂度可以达到O(n),主要有:计数排序,基数排序,桶排序等。   这里我们来探讨一下常用的比较排序算法,非比较排...

weixin_40271182的博客 605

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

基于比较的排序(一)

七大基于比较的排序 一、直接插入排序 1、原理 整个区间被分成有序区间和无序区间;选择无序区间的第一个元素插入到有序区间合适的位置 2、实现 public static void insertSort(int[] array){ for(int i =1;i < array.length;i++){ //有序区间[0,i) //无序区间[i,array.length) int v = ar...

qq_44743329的博客 179

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

聊一聊插入排序和比较排序

简介 插入排序和比较排序是排序算法中比较基础和简单的两种,其时间复杂度均为O(N2)O(N^{2})O(N2),在分析算法时间复杂度时,我们往往会只会分析比较开销,但是交换开销也确实存在。这里我将综合比较开销和交换开销,来分析一下插入排序和比较排序的区别,以及何时选择插入排序?何时该选择比较排序? 我之前的文章 排序算法详解 里给出了几个基本排序算法的JavaScript版本实现,感兴趣的也可以移步。 空间复杂度 插排和选排的均在交换时使用了一个临时空间,其空间复杂度均为O(1)O(1)O(1)。而且插排和

Hitxzi的博客 608

排序(一)——排序的分类及比较

排序是计算机内经常进行的一种操作,其目的是将一组"无序"的记录序列调整为"有序"的记录序列。分内部排序和外部排序。若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。在此我们就针对内部排序——数据结构中的各种排序做一比较。

yc2zgh1314的博客 720

内部排序 (一):各种内部排序方法的比较

作为数据结构的课程笔记,以便查阅。如有出错的地方,还请多多指正! 目录各种内部排序方法的比较地址排序(基于关键字比较的)内部排序在最坏情况下的最快速度 各种内部排序方法的比较 nnn较小/基本有序:可采用简单排序方法(直接插入、简单选择、冒泡排序) nnn较大:可采用快排、堆排。若要求稳定性,则采用归并排序 从平均时间性能上看,快排最佳,但快排在最坏情况下的时间性能不如堆排和归并排序 nnn较大时,归并排序比堆排序用时少,但所需的辅助存储量多 基数排序适用于nnn很大,关键字个数较少的

连理o的博客 3486

内部排序算法之比较排序(一)

内部排序算法指的是数据记录在内存中的排序,通常分为两类:比较排序和非比较排序,接下来主要介绍以下常用几个比较排序算法。冒泡排序基本思想:“轻者上浮,重者下沉”;一趟冒泡的过程:从最左或(最右)侧开始依次比较相邻两个元素大小,每次比较的两个元素记为left,right,若right&lt;left则互换两个元素的值,反之继续向另一侧移动,重复上面的比较,直到到达另一侧;每一趟比较都会有一个元素到达最...

wxb247217的博客 1299

排序算法(一) 三种比较排序

冒泡 vector<int> bubbleSort(vector<int>& nums){ int n = nums.size(); for(int i = n - 1; i >= 0; i--){ bool isSorted = true; // nums(i,n]是有序的 for(int j = 1; j <= i; j++){

Tracker647的博客 1425

排序算法浅析(一)比较排序算法

比较排序算法,就是通过对不同元素的直接比较,确定大小关系,进而将一组数据排序的方法。这种比较可以是相邻元素间的,也可是是不同元素间的。我们通常遇到的如快速排序算法、堆排序算法、冒泡排序等,都是比较排序算法。   下面我将对常见的这几种比较排序算法的算法思想进行简单介绍,并附上实现代码。   一、选择排序算法   遍历一遍数组,选择其中国最小的元素,放在数组的最左边;在剩下的元素中,继续寻找最

邹大海的专栏 1186

java list比较器_Java比较器对数组,集合排序一

数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collator类及其子类RuleBasedCollator,能将排序发挥到极致。1.默认规则的排序String[] array = {"动作","剧情","情感","惊悚","动画","纪录"};List lis...

weixin_35901475的博客 456

排序算法总结2一非比较排序

目录 一. 计数排序(CountingSort) 二. 基数排序(RadixSort) 二.桶排序(BucketSort)       上一篇文章中我们总结了常用的比较排序算法,主要有冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。   这篇文章中我们来探讨一下常用的非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可以达到O(n)。   这里我们用...

weixin_40271182的博客 209

排序算法总结一(比较类)

排序算法总结(一) 24号上午结束了头疼的四个小时,心里的结算是落了下来,可以回来写文章,这次更加意识菜的不行差的太多,写个文章充实一下自己,总结下最近使用过的排序算法。 排序算法 时间复杂度(平均) 时间复杂度(最好) 时间复杂度(最差) 空间复杂度 稳定性 冒泡排序 O(n2n^{2}n2) O(nn^{}n) O(n2n^{2}n2) O(11^{}1) 稳定 选择排序...

ZQYnn's blog 407

排序算法比较系列一

现在不管是找工作还是考试,排序称为了必考的知识点之一了。 排序分为内部排序内部排序和外部排序。 内部排序: 插入排序: 直接插入排序;折半插入排序;希尔排序。 交换排序: 冒泡排序;快速排序。 选择排序: 简单选择排序;堆排序。 归并排序。 基数排序。 外部排序: 多路归并排序。 具体的如图所示(请原谅字的丑陋):

baiBenny的博客 618

Java比较器对数组,集合排序一

数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collator类及其子类RuleBasedCollator,能将排序发挥到极致。1.默认规则的排序  String[] array = {"动作","剧情","情感","惊悚","动画","纪录"};  List list = new ArrayList();  //该List中放有和array数组同样的数据  Array

shixing_11的专栏 3326

基于比较的内排序算法(一)

今天把基于比较的内排序算法写了一遍,其中包括bubbleSort, selectSort, insertSort, heapSort, quickSort, shellShort。 mergeSort留了接口以后补上,下篇再把几种排序的时间复杂度、稳定性、适用情况、运行结果总结一下。

树袋大熊的专栏 818
上一篇: avl树
下一篇: [Java]类加载与反射
刘佳欢--hannah
博客等级 码龄11年 82粉丝 138原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值