排序(选择排序、直接插入排序、冒泡排序、二路归并排序)

模型压缩技术:剪枝、量化与知识蒸馏实战 模型压缩技术:剪枝、量化与知识蒸馏实战,在深度学习领域,模型的性能往往与模型的规模紧密相关,更大的模型通常能学习到更复杂的模式,从而在任务中取得更好的效果。然而,随着模型规模的不断增大,其在实际应用中面临着诸多挑战,如内存占用高、计算资源需求大、推理速度慢等问题,这使得在资源受限的设备(如移动设备、嵌入式设备)上部署变得困难重重。模型压缩技术应运而生,它旨在在尽可能保持模型性能的前提下,通过各种方法减少模型的参数数量和计算量,提高模型的效率和可部署性。 阅读详情

如何用多种方式排序数组?(C语言)

一、实验内容:
1.编写各种排序方法的基本操作函数。
(1) s_sort(int e[],int n):选择排序。
(2) si_sort(int e[],int n):直接插人排序。
(3) sb_sort(int e[],int n):冒泡排序。
(4) merge(int e[],intn):二路归并排序。
2.调用已编写好的函数实现下列操作:
(1)给定数组 E[N]={213,111,222,77,400,300,987,1024,632,555},调用选择排序函数进行排序;
(2)调用直接插人函数进行排序;
(3)调用冒泡函数进行排序;
(4)调用二路归并排序函数进行排序。

二、实验代码如下:
1.选择排序

#include<stdio.h>
#include<conio.h>
#define N 10
int E[N] = { 213, 111, 222, 77, 400, 300, 987, 1024, 632, 555 };

void s_sort( int e[], int n )/* e:存储线性表的数组 n:线性表的结点个数 */
{
    int i, j, k, t;
    for( i = 0; i < n-1; i++ ) {    /* 控制n−1趟的选择步骤 */
        /* 在e[i], e[i+1],...,e[n−1]中选键值最小的结点e[k] */
        for( k = i, j = i + 1; j < n; j++ )
            if( e[k] > e[j] )
                k = j;
        if( k != i ) {      /* e[i]与e[k]交换 */
            t = e[i];
            e[i] = e[k];
            e[k] = t;
        }
    }
}

void main()
{
    int i;
    printf( "顺序排序  初始数据序列为:\n" );
    for( i = 0; i < N; i++ )
        printf( "%d ", E[i] );
        s_sort( E, N );   
    printf( "\n排序后数据序列为:\n" );
    for( i = 0; i < N; i++ )
        printf( "%d ", E[i] );
        getch();
}

2.直接插入排序

#include<conio.h>
#define N 10
int E[N] = { 213, 111, 222, 77, 400, 300, 987, 1024, 632, 555 };

void si_sort( int e[], int n )  /* e:存储线性表的数组  n:线性表的结点个数 */
{
    int i, j, t;
    for( i = 1; i < n; i++ ){/* 控制e[i], e[i+1],...,e[n−1]的比较插入步骤 */
        /* 找结点e[i]的插入位置 */
        // t = e[i];
        for(t = e[i]; j >= 0 && t < e[i-1]; j--)
            
            e[j+1] = e[j];
            e[j+1] = t;
    }
}
  
void main()
{
    int i;
    printf( "直接排序  初始数据序列为:\n" );
    for( i = 0; i < N; i++ )
        printf( "%d ", E[i] );
        si_sort( E, N );
    printf( "\n排序后数据序列为:\n" );
    for( i = 0; i < N; i++ )
        printf( "%d ", E[i] );
        getch();

3.冒泡排序

#include<stdio.h>
#include<conio.h>
#define N 10
int E[N] = { 213, 111, 222, 77, 400, 300, 987, 1024, 632, 555 };

void sb_sort( int e[], int n )  /* e:存储线性表的数组  n:线性表的结点个数 */
{
    int j, p, h, t;
    for( h = n-1; h > 0; h = p ) {
        for( p = j = 0; j < h; j++ )
            if( e[j] > e[j+1] ) {
                t = e[j];
                e[j] = e[j+1];
                e[j+1] = t;
                p = count2;
            }
        }
}
       
void main()
{
    int i;
    printf( "冒泡排序,初始数据序列为:\n" );
    for( i = 0; i < N; i++ )
        printf( "%d ", E[i] );
        sb_sort( E, N );   
    printf( "\n排序后数据序列为:\n" );
    for( i = 0; i < N; i++ )
        printf( "%d ", E[i] );
        getch();
}

4.二路归并排序

#include<stdio.h>
#include<conio.h>
#include<malloc.h>
#define N 10
int E[N] = { 213, 111, 222, 77, 400, 300, 987, 1024, 632, 555 };

void merge_step( int e[], int a[], int s, int m, int n )    /* 两个相邻有序段的合并 */
{
    int i, j, k;
    k = i = s;
    j = m + 1;
    while( i <= m && j <= n )   /* 当两个有序都未结束时循环 */
        if( e[i] <= e[j] )          /* 取其中小的元素复制 */
            a[k++]=e[i++];
        else
            a[k++] = e[j++];
    while( i <= m )                 /* 复制还未合并完的剩余部分 */
        a[k++] = e[i++];
    while( j <= n )                 /* 复制还未合并完的剩余部分 */
            a[k++] = e[j++];
}
void merge_pass( int e[], int a[], int n, int len ) 
/* 完成一趟完整的合并 */
{
    int f_s, s_end;
    f_s = 0;
    while( f_s + len < n ) {    /* 至少有两个有序段 */
        s_end = f_s + 2 * len - 1;
        if( s_end >= n )            /* 最后一段可能不足len个结点 */
            s_end = n - 1;
        merge_step( e, a, f_s, f_s + len - 1, s_end );  /* 相邻有序段合并 */
        f_s = s_end + 1;            /* 下一对有序段中左段的开始下标为上一对末尾+1 */
    }
    if( f_s < n )                   /* 当还剩一个有序段时, 将其从e[]复制到a[] */
        for( ; f_s < n; f_s++ )
            a[f_s] = e[f_s];
}

void merge( int e[], int n )    /* 二路合并排序 */
{
    int *p, len=1, f=0;
    p = (int *)malloc( n * sizeof(int) );
    while( len < n ) {  /* 交替地在e[]和p[]之间来回合并 */
        if( f == 0 )
            merge_pass( e, p, n, len );
        else
            merge_pass( p, e, n, len );
            len*=2; /* 一趟合并后,有序结点数加倍 */
        f = 1 - f;      /* 控制交替合并 */
    }
    if( f == 1 )            /* 当经过奇数趟合并时,从p[]复制到e[] */
        for( f = 0; f < n; f++ )
            e[f] = p[f];
    free( p );
}

void main()
{
    int i;
    printf( "归并排序,初始数据序列为:\n" );
    for( i = 000; i < N; i++ )
        printf( "%d ", E[i] );
        merge( E, N );    
    printf( "\n排序后数据序列为:\n" );
    for( i = 0; i < N; i++ )
        printf( "%d ", E[i] );
        getch();
}

三、运行结果
1.选择排序
在这里插入图片描述

2.直接插入排序
在这里插入图片描述

3.冒泡排序
在这里插入图片描述
4.二路归并排序
在这里插入图片描述

2026实战:YOLOv11融合Swin Transformer,小目标检测精度暴涨47% 本文针对工业零件微小缺陷检测难题,提出了一种CNN与Transformer的最优融合方案。作者发现直接替换YOLOv11骨干网络为Swin Transformer会导致速度骤降69%而精度仅提升2.1%。通过大量实验,总结出三项核心设计原则:1)CNN为主、Transformer为辅;2)高层插入、浅层保留;3)模块化融合。最终提出三种渐进式融合方案,其中骨干部分替换方案(方案二)实现了小目标检测精度提升47%,推理速度仅下降8%的优异表现。文章详细解析了Swin Transformer的核心原理,提供了完 阅读详情

相关推荐

基于Python的高考志愿辅助填报系统

在实际应用中,系统需要处理更复杂的数据,包括更多的高校和专业信息、更详细的录取规则、以及用户的历史选择等。系统需要提供用户友好的界面,让考生输入自己的信息和偏好,然后通过后端的模型计算出推荐的志愿列表。此外,系统还应该提供一些个性化的服务,如根据考生的输入动态调整推荐策略、保存用户的填报历史和偏好等。特征可能包括考生的分数、所在省份、文理科类别、专业偏好、高校的地理位置、排名、专业的就业前景等。3. **推荐逻辑**:根据用户的分数和专业偏好,结合历史录取数据,使用简单的算法来推荐可能录取的高校和专业。

coder_wwwdy的博客 1978

排序:冒泡排序,直接插入排序,简单选择排序,希尔排序,快速排序,堆排序,二路归并排序

前面的指针因为要保持数组的前半部分都小于基准值,所以遇到小于等于基准值的就直接跳过,往后走,直到找到大于基准值的元素。快速排序最好的情况是每一次划分都将n个元素划分为两个长度差不多相同的子区间,均匀二分也就是说每次划分所取的基准都是中值元素,划分的结果是基准的左,右两个无序子区间的长度大致相等,这样递归树高度为logn,而每一层划分的时间为O(n),因为需要遍历n个元素来进行比较和交换,虽然代码中是两重循环,但是l与r运行加起来最多也才整个数组的长度n,所以此时时间复杂度为O(nlogn)

a1937194471的博客 1399

AutosarMCAL开发——基于TC3x系列时钟系统浅析

本文为博主个人学习总结记录,如有不正,欢迎指正。

qq_45583706的博客 889

排序算法(选择排序、直接插入排序、冒泡排序、二路归并排序)(C语言版)

1、插入排序:按关键字大小插入到前面已经排好序的子序列中;直接插入排序是稳定的排序,空间复杂度是O(1);最好的情况时间复杂度为O(n),最坏的时间复杂度为O(n²);2、冒泡排序:时间复杂度T(n)=O(n²);空间复杂度S(n)=O(1);3、选择排序:每次从当前待排序的记录中选取关键字最小的记录表,然后与待排序的记录序列中的第一个记录进行交换,直到整个记录序列有序为止。简单选择排序:时间复杂度是T(n)=O(n²),空间复杂度是S(n)=O(1);是不稳定的;

chensay的博客 935

[游戏排查] Baldur‘s Gate 3 加载完成即崩溃?五步排查帮你快速定位问题

《博德之门3》加载崩溃问题解决方案:针对游戏进度条走完后闪退的情况,提供五步排查法。首先清除LevelCache缓存(成功率最高),其次检查Mod兼容性,然后切换Vulkan/DX11渲染API,再排查存档损坏问题,最后可删除配置目录(需备份存档)。重点提示Steam验证无法解决此类问题,建议按步骤顺序排查,多数情况下前两步即可解决问题。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 3262

智能手表PCB布局:PPG与IMU传感器噪声隔离与应力解耦设计

在可穿戴设备硬件开发中,PCB布局已超越传统布线范畴,成为决定信号完整性、电磁兼容性与机械可靠性的核心环节。心率传感器(PPG)依赖微伏级光电容积脉搏波信号,极易受数字开关噪声与电源纹波干扰;姿态传感器(IMU)则对PCB弯曲形变引发的机械应力高度敏感。其布局需融合电磁场建模、热-力-电多物理协同及高密度互连约束。关键技术价值体现在噪声路径切断、地弹抑制、应力方向解耦与电源域隔离等工程实践。典型应用场景涵盖智能手表、医疗级贴片设备及微型运动传感终端。本文聚焦PPG与IMU两大模组在STM32L4平台上的实操

weixin_32869687的博客 174

小白日记(**)排序算法:冒泡排序_直接插入排序_简单选择排序_二路归并排序_快速排序

**冒泡排序:** 思路:通过相邻两个元素之间不断比较大小,相互交换位置,来达到有序的目的; #include <stdio.h> #include <stdlib.h> #define MAX 100005 int main() { int a[MAX],i,j,N,temp; scanf("%d",&N); for(i=0 ; i<N ;i++) scanf("%d",&a[i]); printf("\n排序

Volta小白 267

3、硬件工程师笔试面试学习汇总——器件篇目录(2025版本)

硬件工程师笔试面试学习

XU157303764的博客 7626

数据结构----C语言八种排序算法(冒泡排序,选择排序,直接插入排序,希尔排序,快速排序,堆排序,二路归并排序,基数排序)

一、冒泡排序 思路:首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两记录交换,然后比较第二个记录和第三个记录的关键字,依次类推,直到第n-1个记录和第n个记录的关键字比较完毕为止。此过程为第一趟冒泡排序,结果使得最大的关键字被放置到最后一个记录的位置上。                                                          ...

Tiantian的博客 3117

手把手教你用Pytorch代码实现Transformer模型(超详细的代码解读)

本文整理了非常清楚的Transformer模型结构图,建议大家在看代码的时候能结合这个结构图来理解,这样理解起来会比较容易! 用Pytorch实现Transformer的完整代码

捡起一束光的博客 7万+

[AHK]获取通达信软件上的股票代码

PC上的股票交易软件的自动止损、自动下单等功能比较弱,不如期货交易软件。 自力更生,程序员都是自己打造工具。 根据IPO模型(Input 输入,Process处理,Output输出),为了方便自动化首先要获取当前交易软件上浏览的股票代码。 截图再OCR显然太麻烦,通过Winspy工具查看下交易软件自带功能的消息号(33780),大家记住这个号码! 下面在用AutoHotkey作为变成语...

liuyukuan的专栏 1万+

排序算法(选择排序、直接插入排序、冒泡排序、二路归并排序)(C语言版)...

对数组进行排序,主要演示选择排序、直接排序、冒泡排序、二路归并排序算法,附上代码演示一、编写好各类排序方法的函数 (1) s_sort(int e[],int n):选择排序。 (2)si_sort(int e[],int n):直接插人排序。 (3)sb_sort(int e[],int n):冒泡排序。 (4)merg...

cnzzs的博客 488

C# 上位机之海康工业相机开发(SDK)实战教程

海康工业相机的C#开发核心是基于MVS SDK的“初始化→枚举→连接→采集→释放”流程,其中图像回调处理和格式转换是关键。严格按照SDK文档处理设备类型(网口/USB)和像素格式;及时释放图像资源,避免内存泄漏;错误码是排查问题的重要依据(可参考SDK中的“错误码说明”文档)。掌握这些基础后,可结合机器视觉算法(如OpenCV)实现缺陷检测、尺寸测量等高级功能,构建完整的工业视觉系统。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 3833

数据结构八大排序(直接插入排序*希尔排序*冒泡排序*二路归并*简单选择排序*堆排序*基数排序*快速排序)

数据结构八大排序及代码实现 直接插入排序 定义:直接插入排序(Straight Insertion Sort)的基本操作是将-一个记录插入到已经排好序的有序表中,从而得到-一个新的、记录数增1的有序表。 举例: 时间复杂度O(n^2) 空间复杂度O(1) 稳定的 void InsertSort(int arr[], int len)//待排序数组和待排序数组长度 { assert(arr != NULL); if (arr == NULL) { return; } int count = 0;

weixin_48560325的博客 489

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

数据结构排序算法之直接插入、折半插入、希尔排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序(二路归并排序)C语言实现

插入:直接插入、折半插入、希尔排序 交换:冒泡排序、快速排序⭐ 选择:简单选择排序、堆排序⭐ 归并:归并排序(二路归并排序)⭐ 快速排序、堆排序和归并排序为时间复杂度较小的排序方法,为O(nlogn); 英语不太好,有些算法就直接用拼音了... 这些算法的输入输出语句用的是cout.cin。(为C++内容,只需将头文件改为#include<iostream> using namespace std;即可兼容C\C++语句。或可直接将cin.cout语句改为scanf\printf语.

c_cjiajia_的博客 3566

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

头歌作业之排序1、2、3、4

为了完成本关任务,你需要掌握:链表的相关操作和掌握选择排序算法。为了完成本关任务,你需要掌握:直接插入排序的算法思想。为了完成本关任务,你需要掌握:折半插入排序算法。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写一个能实现希尔排序算法的函数。本关任务:编写函数实现折半插入排序算法。3 9 5 8 7 (数字序列)

weixin_62075168的博客 1万+

【C++】顺序表的排序

#include <iostream> #include <stdlib.h> #include <time.h> using namespace std; #define MAXSIZE 20 //顺序表最大长度 typedef struct{ int key; //关键字项,关键字类型为整形 char *otherinfo;...

cout0 3075

数据结构复习之简答题

(1)设待排序的关键字序列为{12,2,16,30,28,10,16*,20,6,18},试分别写出使用以下排序方法,每趟排序结束后关键字序列的状态。 ① 直接插入排序 ② 折半插入排序 ③ 希尔排序(增量选取5,3,1) ④ 冒泡排序 ⑤ 快速排序 ⑥ 简单选择排序 ⑦ 堆排序 ⑧ 二路归并排序 ①直接插入排序 ② 折半插入排序 折半插入排序在直接插入排序的基础上,在查询插入位置的时候采用的是折...

weixin_43978453的博客 2万+

python—排序算法

一.直接插入排序 算法原理: 将待排序序列分为有序区和无序区,每次将无序区中的第一个元素插入有序区中,直至无序区元素为空,排序完成。 (1)初始时,将待排序列的第一个元素作为有序区,其后剩余序列作为无序区。 (2)将无序区的第一个元素与有序区的元素从后往前比较大小,若小于,则将该有序区元素后移一位,直至出现大于等于的情况,便找到了插入位置。 (3)无序区元素为空时,排序完成。 python代码: ...

yuluotianjin的博客 259

排序算法

一、冒泡排序 冒泡排序是最基础的排序算法之一,

weixin_45523802的博客 394

数据结构中的7种排序算法

数据结构中的7种排序算法排序是将一个记录的任意序列重新排列成一个按键值有序的序列。 时间复杂度主要考虑元素的移动次数。 结构如下: 1.直接插入排序 1,定义:依次将待排序序列中的每一个记录插入到一个已经排好序的序列中,直到全部记录都排好序。 2,时间复杂度:在最好情况下,待排序序列为正序,时间复杂度为O(n);最坏情况下,待排序序列为逆序,时间复杂度为O(n^2);平均情况下,时间

Decorator2015的博客 2353

数据结构——排序

1、直接插入排序 void InsertSort(int R[],int n)//待排关键字存储在R[]中,个数为n { int i,j; int temp; for(i = 1;i<n;i++) { temp = R[i];//将待插入关键字暂存于temp中 j = i-1; while(j>=0 &&a...

小歪歪的博客 244

六大排序算法

package com.ds.exam; public class test2 { /*直接插入排序*/ public static void InsertSort(int A[],int n){ int i,j; for (i=1;i<n;i++){ int temp=A[i]; for ...

qq_37847316的博客 152

天勤数据结构代码——排序

直接插入排序 :每趟将一个待排序的关键字按照其值得大小插入到已经排好得部分有序序列的适当位置上,直到所有待排关键字都被插入到有序序列为止; void InsertSort(int R[], int n) { int i, j, temp; for (int i = 0; i < n; i++) { temp = R[i]; //将待插入关键字暂存于temp...

weixin_42759458的博客 1430

常见的排序算法实现

本文部分代码参考2022年王道数据结构实现,所有代码均可运行。不做过多原理解释,可以结合王道内容来理解代码,最后在自己电脑上实现。

qq_45813977的博客 1099

常用的排序算法

   这几天, 花点时间复习了常用排序算法, 并动手编一下。这里并不解说各种排序算法,只提供代码./** * 提供常用的排序算法 * 包括: 直接插入排序, 折半插入排序, 希尔排序,          直接选择排序, 堆排序, 冒泡排序, 快速排序, 二路归并排序 */#ifndef NULL#define NULL 0#endif/** * 直接插入排序 */templateclass

riag的专栏 1866

排序问题

排序总共分为8种, 插入排序分为直接插入排序和希尔排序 选择排序分为简单排序和堆排序 交换排序分为冒泡排序和快速排序 还有两种归并排序和基数排序 谭浩强书上给了3种排序,起泡法,比较交换法和选择法 1.直接插入排序 void insert_sort(int a[],int n){ int i,j,temp; for(i=1;i<n;i++) if(a[i]<a[...

qq_42799920的博客 476
上一篇: 查找(无序线性、有序线性、二分查找)
下一篇: 动态规划算法--背包问题(C语言版)
Chensay.
博客等级 码龄6年 1万+粉丝 122原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值