基于比较的排序(一)

【算法课程实验一】五种排序算法的分析比较 实验目的:掌握选择排序、冒泡排序、合并排序、快速排序、归并排序的算法原理分析不同排序算法的时间效率和时间复杂度,以及理论值与实测数据的对比分析。一、冒泡排序算法伪代码: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的排完序就可以得到最终结果.

小结
感谢您的阅读~~
YOLO11实战 第010期-基于yolo11的农业杂草作物目标检测实战文档(详细教程) 通过这条曲线,用户可以评估模型的检测能力,分析模型在不同阈值下对真实目标的检测是否全面。通过这条曲线,可以评估模型在目标检测任务中的整体性能,并找到合适的置信度阈值,以在精确率和召回率之间做出最佳平衡。PR 曲线越接近右上角,模型性能越好,曲线下方的面积越大,说明模型在不同置信度下的。),它展示了不同置信度下的召回率。条曲线都显示了随着召回率的增加,精确度略有下降的趋势,但整体上精确度保持在很高的水平。通过这条曲线,可以选择合适的置信度阈值,以优化模型的检测结果,平衡精确率和召回率。反映了分类器的准确性。 阅读详情

相关推荐

从零开始:用君正T23ZN打造智能门锁双摄系统(含代码示例与调试技巧)

本文详细介绍了基于君正T23ZN视频处理芯片构建智能门锁双摄系统的完整实战方案。内容涵盖硬件选型与核心电路设计、软件开发环境搭建、双摄驱动框架、图像信号处理(ISP)调优、人脸识别算法集成与性能优化,以及系统调试与稳定性保障。文章提供了丰富的代码示例和调试技巧,旨在帮助嵌入式开发者高效实现具备人脸识别与监控功能的低功耗智能门锁视觉系统。

opencv7vision的博客 716

基于比较的常见排序方式

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

m0_53120156的博客 2508

全网最全 | Linux(Ubuntn)系统安装 | 硬盘挂载 | 用户创建 | 生信分析配置

昨天(2024年7月23日)我们分享了学生及科研人员电脑配置推荐 | 笔记本+外置显卡配置,性能足够支持完成你博士论文文本内容,那么今天我们就分享一文解决 | Linux(Ubuntn)系统安装 | 硬盘挂载 | 用户创建 | 生信分析配置的教程,我们使用一文来解决大家在做生信时遇到安装系统、配置环境的问题。在此文中,我们尽快可能给出一套全网最全的教程。目标是解决新手小白同学查资源的困惑和难题。但是,每个童鞋遇到的问题不一样,此教程也不可能把你遇到的每个问题都归纳在其中。我们也希望,

BioinfoDu 2261

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

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

weixin_48084293的博客 9932

2026 具身智能 VLA/WAM 全栈学习与训练路线:从动作建模、SFT、RL 到世界模型的 RTX PRO 6000 96GB 单卡实战指南

我会把这张表做成“”而不是只列论文名:先核对每个模型截至的公开代码、训练目标和数据接口,再单独给你一套。对于没有公开、只有推理代码或训练细节不完整的模型,我会明确标出来,避免把“论文里提到”误写成“可复现”。目前有一个重要更新:。截至今天 NVIDIA 官方开源主线已经是换成 Cosmos-Reason2-2B/Qwen3-VL 架构,动作端仍是连续路线,而且官方明确给出单卡微调时默认只训练,峰值显存约。所以你的 96GB 单卡对 GR00T SFT 非常宽裕。可以。下面我按,把它整理成一张真正面向“

u013250861的博客 446

XC7Z010-1CLG400C开发板ADC引脚配置全攻略(附完整引脚列表)

本文详细解析了XC7Z010-1CLG400C开发板的ADC引脚配置方法,涵盖XADC模块基础、CLG400封装的引脚布局、硬件设计规范及Vivado工程配置实战。特别提供了完整的引脚列表和性能优化技巧,帮助开发者高效实现模拟信号采集,适用于Zynq-7000系列开发。

weixin_29188043的博客 466

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

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

weixin_53438051的博客 2636

【云原生】阿里云SLS日志自定义字段标签实现日志告警

样例:一个典型的java log初始化日志格式把日志中的INFO提取出来做为一个标签,在开源日志框架中,配置采集器实现- regex:在阿里云SLS日志服务同样可以实现,首先我们进入到一个日志库,查看数据接入,我这里使用的是Logtail工具在【处理配置】中,选择【处理插件组合】,新增提取字段插件原始字段:填写要被提取的日志,对应原始字段的内容做正则结果字段:正则表达式对应的捕获组对应结果:捕获组 匹配内容 说明1 ywgy-app-service 服务名称。

CN_Eden 742

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

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

大家一起进步叭 9262

YOLOv8改进策略【卷积层】| DEConv: 强度信息与梯度特征融合的细节增强 适用于小目标与细节目标检测任务

本文记录的是利用 模块优化 的目标检测网络模型。(Detail-Enhanced Convolution,细节增强卷积)的设计旨在,解决 目标检测网络中传统普通卷积缺乏目标细节相关先验、对小目标边缘、目标与背景边界等关键细节捕捉能力不足的问题,同时避免引入额外参数量与计算开销,以适配 对实时推理性能与检测精度的双重需求。DEA-Net: Single image dehazing based on detail-enhanced convolution and content-guided atte

Limiiiing的博客 348

CLRNet车道线检测模型在Orin Nano Super开发板上的全栈部署与优化实践

本文详细介绍了将CLRNet车道线检测模型部署到NVIDIA Orin Nano Super开发板的全过程。内容包括:1) Orin开发板硬件规格分析;2) JetPack SDK环境配置与Python虚拟环境搭建;3) CLRNet模型架构解析与PyTorch实现;4) 模型转换与TensorRT加速优化方法。通过系统性的环境配置、模型转换和性能优化,为边缘计算场景下的车道线检测应用提供了完整的解决方案,实现了在Orin平台上的高效部署。

huanghm88的专栏 226

【数据结构】第七章 排序

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

sinat_33438008的博客 5018

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

weixin_40271182的博客 605

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

基于比较的排序(一)

七大基于比较的排序 一、直接插入排序 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

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

简介 插入排序和比较排序是排序算法中比较基础和简单的两种,其时间复杂度均为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、付费专栏及课程。

余额充值