基本算法——直接选择排序

手把手教你为FPGA项目集成HyperRAM IP核:从AXI接口封装到上板调试全流程 本文详细介绍了如何为FPGA项目集成HyperRAM IP核,涵盖从AXI接口封装到上板调试的全流程。通过对比DDR3L、PSRAM和HyperRAM的性能指标,突出HyperRAM在低功耗和小封装尺寸方面的优势,并提供硬件连接、AXI4-Lite接口设计、状态机优化及调试技巧等实用内容,帮助开发者高效完成FPGA项目中的内存扩展。 阅读详情

​
​

活动地址:优快云21天学习挑战赛

​

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…

…
欢迎参与优快云学习挑战赛,成为更好的自己,请参考活动中各位优质专栏博主的免费高质量专栏资源(这部分优质资源是活动限时免费开放喔~),按照自身的学习领域和学习进度学习并记录自己的学习过程。您可以从以下3个方面任选其一着手(不强制),或者按照自己的理解发布专栏学习作品,参考如下:

**

创作计划

**
1,机缘

早年就加了群主大大的好友和交流群,那个时候是在刚读大学本科的时候,现在马上也该研二了~~~

2,收获

A,巩固大佬专栏中的基本算法
B,能够让自己写的内容帮助到一部分人
C,认识志同道合的领域同行
…

3,日常

提示:当前创作和你的工作、学习是什么样的关系 例如:

  1. 偶尔会写博客记录自己学习的内容
  2. 大部分时间没养成写博客的习惯,希望今后遇到问题解决问题都做记录分享给大家

4,憧憬

提示:不想去互联网公司卷,惜命哈哈哈,希望找个稳定一点的工作,过幸福安稳的生活就好~~

学习计划

1,学习目标

每篇博客使用自己习惯的编程语言实现至少一个算法

2,今日学习内容

A,了解直接插入排序的概念
B,使用编程实现该算法

3,学习时间

周一至周五晚上 7 点—晚上9点

4,学习产出

优快云技术博客 1 篇

学习日记

1.选择排序的概念:

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。

它也可以被划分为两个区域进行理解:
在这里插入图片描述
①初始状态:无序区为R[0…n-1](共n个元素),有序区为空。 [1]
②第1趟排序
设置一个变量i,让i从0至n-2循环的同时,在对比数组中元素i跟元素i+1的大小,如果R[i+1]比R[i]小,则用一个变量k来记住他的位置(即k=i+1)。等到循环结束的时候,我们应该找到了R中最小的那个数的位置了。然后进行判断,如果这个最小元素的不是R的第一个元素,就让第一个元素跟他交换一下值,使R[0…0]和R[1…n-1]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
③第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[0…i-1]和R[i…n-1]。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[0…i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
在这里插入图片描述

2.举例说明

现在有一组待排序的初始关键字序列为{49 , 38 , 15 , 17 , 16 , 13 , 27 , 49},直接选择排序过程如下:
在这里插入图片描述

step1:

先找到最小值13,将其放到列表的第一个位置:
在这里插入图片描述

step2:

除掉第一个元素13,往后在无序区里面找最小值,找到了15,放在第二个位置,如下图所示:
在这里插入图片描述

step3:

除掉排好序的前两个元素,往后在无序区里面找最小值,找到了16,放在第三个位置,如下图所示:
在这里插入图片描述

下面的过程就以此类推,不再一一画出来了,大家只要知道原理就可以了,下面是直接选择排序的代码实现了:

3.代码实现版本1(python):

def direct_select_sort(l):
    for i in range(len(l) - 1):
        min_val = l[i]
        for j in range(i + 1, len(l)):
            if l[j] <= min_val:
                min_val = l[j]
        min_index = l.index(min_val)
        # l[i],l[l.index(min_val)] = l[l.index(min_val)],l[i]
        # l[l.index(min_val)], l[i] = l[i], l[l.index(min_val)]
        l[i], l[min_index] = l[min_index], l[i]
        print(l)
    # print(l)


l = [49, 38, 15, 17, 16]
direct_select_sort(l)

注意:上面的代码中两行被注释的交换元素的代码在python语言中按道理都是成立的,但是大家运行之后会发现里面有一行不能完成排序操作,大家想知道为什么的可以参考下面这个帖子:

https://blog.youkuaiyun.com/Liz_Jiang/article/details/80705011

另外上面这个代码如果列表中有重复的元素也会有bug,因为原理是根据索引值查找的第一个最小值,如果这样就会打乱已经排好序的元素,我们可以使用第二个版本的代码优化:

原理是:每一次选出最值之后,将搜索的列表只局限在无序区中,这样下标就不会定位到有序区中已经排序好的元素了。

4.代码实现版本2(python):

def direct_select_sort(l):
    for i in range(len(l) - 1):
        min_val = l[i]
        for j in range(i + 1, len(l)):
            if l[j] <= min_val:
                min_val = l[j]
        min_index = l[i:].index(min_val)
        l[i], l[min_index + i] = l[min_index + i], l[i]
        print(l)
    # print(l)


l = [17, 49, 38, 15, 15, 17, 16]
direct_select_sort(l)

我们还可以只记录下标,这样会更加容易理解:

5.代码实现版本3(python):

def direct_select_sort(l):
    for i in range(len(l) - 1):
        min_val = i
        for j in range(i + 1, len(l)):
            if l[j] <= l[min_val]:
                min_val = j
        l[i],l[min_val]=l[min_val],l[i]

        # print(l)
    print(l)


l = [17, 49, 38, 15, 15, 17, 16]
direct_select_sort(l)

6.算法性能

6.1时间复杂度

选择排序的交换操作介于 0 和 (n - 1)次之间。选择排序的比较操作为 n (n - 1) / 2 次之间。选择排序的赋值操作介于 0 和 3 (n - 1) 次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+…+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况交换n-1次,逆序交换n/2次。交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快。

6.2稳定性

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第n-1个元素,第n个元素不用选择了,因为只剩下它一个最大的元素了。那么,在一趟选择,如果一个元素比当前元素小,而该小的元素又出现在一个和当前元素相等的元素后面,那么交换后稳定性就被破坏了。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中两个5的相对前后顺序就被破坏了,所以选择排序是一个不稳定的排序算法。

Mac安装Typescript报错 根本原因是系统级目录的权限限制。推荐通过修改目录权限或使用nvm彻底解决问题。 阅读详情

相关推荐

Xilinx ERNIC RoCEv2 FPGA实现与QP队列深度解析

本文深入解析Xilinx ERNIC RoCEv2在FPGA上的实现,重点剖析QP队列对的管理机制与深度优化策略。通过Verilog代码示例和工程实战,详细介绍了如何实现高吞吐量、低延迟的RDMA硬件卸载方案,为金融交易和数据中心应用提供性能优化指导。

solidity8miner的博客 878

C语言实现直接选择排序

举个例子:玩斗地主时,一次性把牌拿起,然后把牌大的放最右边,再把次大的放在最大牌的前面,依次排序,就把牌次小到大排好了,直接选择排序就类似如此。前面的直接选择排序一次我们只排一个数,现在我们每一次从序列中找出一个最大和最小的数,分别放在两边,这样排序就会快一些。,因此直接选择排序的效率比较低,使用它的时候数据规模要尽量小,否则要运行很久才会出结果。直接选择排序的时间复杂度没有最好和最坏的情况,不管序列是有序还是无序,它的。在最后那里我们可以看到end<begin,此时排序就结束了。

LQBJY的博客 1425

【ELF2学习板】基于OpenMP与RK3588多核架构优化FFTW的并行计算效率

本文详细介绍了如何在ELF2学习板上利用OpenMP与RK3588多核架构优化FFTW的并行计算效率。通过编译支持OpenMP的FFTW库、合理设置线程绑定与调度策略,以及内存访问优化等技巧,显著提升了FFT计算的性能。实测数据显示,多核并行优化可使4096点FFT计算速度提升一倍以上,特别适合信号处理、图像分析等高性能计算场景。

weixin_30352645的博客 607

直接选择排序算法

代码如下: import java.util.Scanner; public class DirectSelectionSort { public static void main(String[] args) { int num[] ; //num = new int[]{1, 3, 2,5,4,7,6,}; System.out.println("请输入数n"); Scanner scanner = new Scanner(Sy

yueyuanjian的博客 266

74hc595驱动模块的Verilog设计(线性状态机)

module hc595_driver( input clk, //50Mhz input rst_n, //复位信号 input [15:0] data, //数码管待显示数据,8位段选数据,8位位选数据 input en, //使能 o...

qq_41294540的博客 3744

别再让COGI拖慢你的SAP接口!手把手教你配置BAPI_PRODORDCONF_CREATE_TT的同步货物移动

本文深入解析SAP生产订单报工接口中的COGI问题,通过BAPI_PRODORDCONF_CREATE_TT的同步配置实战,解决异步更新导致的性能瓶颈。文章详细介绍了增强点配置和性能验证,帮助用户彻底消除COGI堆积,提升接口效率。

weixin_29214691的博客 482

【排序算法】选择排序(详细代码)

【排序算法】选择排序1.【基本思路】2.【代码】 1.【基本思路】 选择排序: (1)读入数据存放在a数组中 (2)在a[0]~a[n]中选择值最小的元素,与第一位元素交换,则把最小的元素放入a[0]中。 (3)在a[1]~a[n]中选择值最小的元素,与第二位元素交换,则把最小的元素放入a[1]中。 (4)… (5)直到第n-1元素与第n个元素比较排序为止。 2.【代码】 #include <bits/stdc++.h> using namespace std; int main() { in

qq_40802813的博客 5663

Kubernetes集群资源优化实战:Volcano调度器如何帮你省下30%GPU算力

本文详细介绍了如何通过Volcano调度器的Binpack策略优化Kubernetes集群中的GPU资源利用率,解决AI模型训练中的资源碎片化问题。通过实战配置和调优指南,帮助用户提升30%的GPU算力利用率,显著降低任务等待时间和硬件成本。

weixin_30832143的博客 507

c语言排序算法——直接上代码

排序目录(一)插入排序(1)直接插入排序(2)希尔排序(二)交换排序(1)冒泡排序(2)快速排序(三)选择排序(1)简单选择排序(2)堆排序(四)归并排序(五)基数排序 (一)插入排序 (1)直接插入排序 插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法步骤: 1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适

IT_demon的博客 2441

STM32CubeMX平台F4系列固件下载核心要点

详解STM32CubeMX平台下F4系列单片机的固件包下载方法与常见问题,重点讲解stm32cubemx固件包下载流程及配置技巧,帮助开发者快速完成开发环境搭建。

weixin_42575505的博客 895

Python爬虫实战:美团外卖商家数据抓取与分析

随着互联网技术的快速发展,外卖平台已成为人们日常生活中不可或缺的一部分。本文基于Python爬虫技术,使用最新的异步爬虫框架和反爬虫绕过技术,实现了对美团外卖平台商家信息与评分数据的自动化抓取。通过对抓取数据的清洗、存储和分析,为餐饮行业市场研究和商业决策提供数据支持。本文详细介绍了爬虫的设计思路、技术实现方案、数据处理方法以及可视化分析结果,为相关领域的研究者和开发者提供参考。关键词:Python爬虫;美团外卖;数据抓取;数据分析;异步爬虫。

2201_76125261的博客 1822

C语言实现选择排序算法

选择排序算法

qq_58417838的博客 3386

【OpenClaw企业级智能体实战】第10篇:医疗行业OpenClaw实战:病历自动书写、医保智能审核与患者随访管理(附HIPAA合规配置+完整代码)

医疗行业正面临“效率提升需求”与“合规监管红线”的双重矛盾:病历书写占据医生30%-50%工作时间,医保审核效率低下,患者随访工作量巨大,但医疗数据“不出域”“责任不转移”的要求又限制了AI落地。本文基于华为云、腾讯云安全规范及中关村科金、复旦大学附属中山医院等真实实践,拆解OpenClaw在医疗场景的五大核心应用(病历自动书写、医保智能审核、患者随访管理、科研文献综述、医学影像预处理),提供私有化部署架构、HIPAA合规配置模板、完整实操流程及可直接运行的代码。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 441

直接选择排序基本思想和算法代码实现

直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0]R[n-1]中选取最小值,与R[0]交换,第二次从R[1]R[n-1]中选取最小值,与R[1]交换,…,第i次从R[i-1]R[n-1]中选取最小值,与R[i-1]交换,…,第n-1次从R[n-2]R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从...

qq_30576089的博客 617

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Java基本排序算法 -- 直接选择排序

一、直接选择排序 public class SelectSort { /** 直接选择排序 */ public void selectSort(int[] data) { int i, j, small; int temp; for (i = 0; i < data.length - 1; i++) { small = i; for (j = i+1; j < data.length; j++) { //寻找最小的数据元素 if (data[j] <

书香水墨 1770

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C++实现基本排序算法3:直接选择排序

选择排序的基本思想是: 在每一趟排序中,在待排序自表中选出关键字最小或者最大的元素放在其最终的位置。本文主要介绍的是直接选择排序。 1. 直接选择排序的基本原理 参考文献: 经典排序算法 - 选择排序Selection sort 2. 代码 #include <iostream> #include <vector> void Swap(std::vector&l...

暮日落流年的博客 1060

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

数组的基本操作和冒泡算法 直接选择排序 反转排序

数组 一、数组定义方法 方法一: 数组名=(value0 value1 value2 …) 方法二: 数组名=([0]=value [1]=value [2]=value …) 方法三: 列表名=“value0 value1 value2 …” 数组名=($列表名) 方法四: 数组名[0]=“value” 数组名[1]=“value” 数组名[2]="value" 二、数组包括的数据类型 数值类型 字符类型(字符串):使用" "或’ '定义,防止元素当中有空格,元素按空格分割 三、获取数组长

wyc788788的博客 260

菜鸟学JAVA之—— 基本排序算法(直接排序,选择排序,冒泡排序)

一、 直接排序 思路: 首先需要两个嵌套的for循环,外层for循环控制轮数;内层for循环控制每轮比较的次数。 这里来演示一下遍历的过程: 第一轮: 首先让i指向数组的首部,让j指向i的后一个元素,两者比较,2比1大,所以交换2跟1的位置,然后j后移 依次这样排完一轮的结果为: 第二轮: 让i后移,j指向i的后一位,继续重复第一轮的过程。 第三轮: 一直重复就可以排序完成了。 代码实现 ...

菜鸟琪 412

数组基本操作及冒泡算法、直接选择排序

文章目录一、数组定义方法 一、数组定义方法 方法一: 数组名=(value0 value1 value2 …) 方法二: 数组名=(value0 value1 value2 …) 方法三: 列表名=“value0 value1 value2 …” 数组名=($列表名) 方法四: 数组名[0]=“value” 数组名[1]=“value” 数组名[2]=“value” 数组包括的数据类型 数值类型 字符类型 使用" "或’ '定义 ...

愿你成为自己喜欢的模样,不抱怨,不将就,有自由,有光芒! 1181

基本排序算法(直接排序,选择排序,冒泡排序)

一、 直接排序 思路: 首先需要两个嵌套的for循环,外层for循环控制轮数;内层for循环控制每轮比较的次数。 这里来演示一下遍历的过程: 第一轮: 首先让i指向数组的首部,让j指向i的后一个元素,两者比较,2比1大,所以交换2跟1的位置,然后j后移 依次这样排完一轮的结果为: 第二轮: 让i后移,j指向i的后一位,继续重复第一轮的过程。 第三轮: 一直重复就可以排序完成了。 代码实现 //此代码包含转换过程 import java.util.*; public class DSort{ publ

m0_52384288的博客 5005

c语言按字母排序用直接插入法,C语言基本排序算法之插入排序与直接选择排序实现方法...

本文实例讲述了C语言基本排序算法之插入排序与直接选择排序实现方法。分享给大家供大家参考,具体如下:声明待排序元素类型/*--------------------------typedef.h方便修改待排序元素类型-------------------------------------*/#ifndef TYPEDEF_H#define TYPEDEF_Htypedef int T;#endif插...

weixin_42240669的博客 450

直接插入排序、希尔排序、冒泡排序、快速排序、简单选择排序和归并排序等几种排序算法的基本思想、代码实现和性能对比

查找和排序都是在程序设计中经常用到的算法;对于插入排序、冒泡排序、归并排序、快速排序和简单选择排序等不同算法的优劣的对比不论在考试还是在面试过程中都占据相当重要的地位,所以我们一定要对各种排序算法的特点了如指掌,并能够从额外空间消耗、平均时间复杂度和最差时间复杂度等方面比较他们的有缺点,同时能够迅速写出各算法的代码。 这里,我将详细的总结一下直接插入、希尔排序、起泡排序、快速排序、简单选择排序和归并排序这6中排序算法的基本思想、代码实现以及从几个方面进行性能对比。 一,内排序分类 内排序:指在排序期间数据对

qq_45043381的博客 5115

10 基本排序算法:直接选择排序与堆排序

一、直接选择排序 原理 直接选择排序又被称为简单选择排序,第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。这样共需进行i-1趟比较,直到排序完成所有记录为止。例如当进行第i趟选择时,从当前候选记录中选出关键字最小的k号记录,并和第i个记录进行交换。 对于拥有n个记录的文件的直接选择排序来说,其过程可以经过n-1趟直接选择排序得到一个...

gofuncchan的博客 431

排序算法及三种基本排序(冒泡排序、选择排序、直接插入排序)

一、排序的分类及效率分析 二、三种基本排序(冒泡排序、选择排序、直接插入排序)的java代码实现 /* 三种基本排序:T(n) = O(n的平方),S(n) = O(1) 1、直接选择排序 不稳定的排序 2、冒泡排序 稳定的排序 3、直接插入排序 稳定的排序 */ public class BasicSort { public...

Anna4的博客 1012

三大基本排序算法:冒泡排序、直接插入排序、直接选择排序

本文介绍了三种基础排序算法:冒泡排序、直接插入排序和直接选择排序。冒泡排序通过相邻元素比较和交换将最大值"冒泡"到末尾,时间复杂度O(n²),具有稳定性。直接插入排序模拟整理扑克牌过程,将元素插入已排序序列适当位置,时间复杂度O(n²),同样稳定。直接选择排序每轮选择最小最大值并交换到两端,时间复杂度O(n²),但不稳定。三种算法均为原地排序,空间复杂度O(1)。冒泡和插入排序在最好情况下可优化至O(n),而选择排序始终为O(n²)。选择排序的双向优化版本能减少遍历轮数,但需注意交换顺序的陷阱。

2501_92951809的博客 368
上一篇: 一周入门Python之day04
下一篇: 一周入门Python之day05
胖虎子688
博客等级 码龄9年 1979粉丝 107原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值