选择排序

【数据结构】选择排序—直接选择排序、树形选择排序 选择排序的主要思想是每一趟从待排序列中选取一个关键字值最小的记录,也即第1趟从n个记录中选取关键字最小的记录,在第2趟中,从剩下的n-1个记录中选取关键字值最小的记录,直到整个序列中的记录都选完位置。 阅读详情

我个人认为冒泡排序和选择排序真是一对孪生兄弟,因为我总感觉这两个算法的思想很像,时间复杂度也相同。但其实他们的算法思想是不同的。

冒泡排序是从前往后逐个比较相邻的元素,从而使得最大的元素”冒”到数组的最右边。
而选择排序则是将某一个元素与其余所有元素相比较,选出一个最小/最大的元素放在当前位置。
代码如下:

template<typename T>
void SelectSort(vector<T>& v)
{
    if(v.size()<=1)
        return;
    int length=v.size();
    int i,j;
    for(i=0;i<length;++i)
    {
        for(j=i+1;j<length;++j)
        {
            if(-1==compair(v[j],v[i]))
            {
                swap(v[j],v[i]);
            }
        }
    }
}

在这里说过,”所有基于位置的比较排序的时间复杂度都逃不了O(n2)的厄运”,所以选择排序的时间复杂度同样也是O(n2)。

同样来看看可以改进的地方:
改进一:如果一趟排序中没有进行交换,则表明排序完成。具体算法再冒泡排序中说过,再次不在表述。

改进二:在每一趟排序中进行双向选择。
代码如下:

template<typename T>
void SelectSort(vector<T>& v)
{
    if(v.size()<=1)
        return;
    int length=v.size();
    int i,j;
    for(i=0;i<length;++i)
    {
        for(j=i+1;j<length-i;++j)
        {
            int ma=max(v,i,j,length-i-1);
            int mi=min(v,i,j,length-i-1);
            swap(v[i],v[mi]);
            if(1==compair(v[ma],v[length-i-1]))
                swap(v[length-i-1],v[ma]);
        }
    }
}

以上

如果你有任何想法或是可以改进的地方,欢迎和我交流!

完整代码及测试用例在github上:点我前往

本文首发于www.sbrave.cn

【完】

排序算法之 选择排序 选择排序   选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。   常用的选择排序方法有简单选择排序和堆排序。 简单选择排序 在介绍选择排序算法前,我们再回顾下冒泡算法。 冒泡算法是通过两两比较,不断交换,逐个推进的方式,来进行排序的。 一次遍历,得...... 阅读详情

相关推荐

冒泡排序.smart

项目上均时启用设备,写的冒泡排序子程序,西门子S7-200smart冒泡排序子程序,适用均时运行设备,程序是Dint类型排序,可自行修改Real类型等。

排序算法(二) 选择排序和堆排序

排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据的排序。

m0_73633144的博客 1219

Power BI常见问题篇1:无法打开文档

Power BI常见问题篇1:无法打开文档

weixin_48273257的博客 3304

八种排序方法(一)——选择排序

编译器:Xcode 编程语言:C++ 选择排序的基本思想: 每一趟在n-i+1(i=1,2,3…,n-1)个记录中选取关键字最小的记录与第i个记录交换,并作为有序序列中的第i个记录。 例如: 待排序列: 43,65,4,23,6,98,2,65,7,79 第一趟: 2,65,4,23,6,98,43,65,7,79 第二趟: 2,4,65,23,6,98,43,65,7,79 第三趟

Wang.T的博客 5万+

ENVI 5.6 + Sarscape 5.2 保姆级教程:哨兵一号数据处理全流程(含DEM自动下载)

本文提供ENVI 5.6与Sarscape 5.2处理哨兵一号数据的完整实战教程。详细介绍了从数据导入、研究区裁剪、DEM自动下载与集成,到核心的配准、滤波及地理编码全流程,最终生成可用于定量分析的地理编码后向散射系数图。重点演示了DEM数据在SAR处理中的关键作用与自动获取方法,帮助用户快速掌握SAR数据基础处理技能。

coffee的博客 680

别再死记硬背注意力机制了!用Python+PyTorch从零实现一个HAN(Hierarchical Attention Network)

本文详细介绍了如何使用Python和PyTorch从零实现Hierarchical Attention Network(HAN),通过代码级解析帮助读者深入理解层次注意力机制。文章涵盖词级和句子级注意力层的构建、完整HAN架构的实现、训练技巧及注意力可视化方法,特别适合希望掌握高级NLP技术的开发者。

weixin_28744423的博客 163

五类排序算法(插入,交换,选择,归并)

五种排序方法 插入排序 直接插入排序 希尔排序 交换排序 冒泡排序 快速排序 选择排序 简单选择排序 堆排序 归并排序 分类排序 排序方法基本思想和算法描述 直接插入排序/冒泡排序/简单选择排序,这些简单算法所需时间复杂度大为O(n^2). 希尔排序/快速排序/堆排序/归并排序,这些较复杂算法的时间复杂度,平均情况下位O(nlog2n),有些最快情况下退化成O(n^2).

biezhihua的专栏 1万+

深入解读WT软件湍流强度计算与分析

深入解读WT软件湍流强度计算与分析

weixin_46713695的博客 1021

排序算法的分类及如何选择

一.排序的分类1、 根据待排序的数据大小不同,使得排序过程中所涉及的存储器不同,可分为: 内部排序 外部排序 2、 排序关键字可能出现重复,根据重复关键字的排序情况可分为: 稳定排序 不稳定排序 3、 对于内部排序,依据不同的排序原则,可分为: 插入排序 交换(快速)排序 选择排序 归并排序 计数排序 4、 针对内部排序所需的工作量划分,可分为: 简单排序 O(n^2

哒哒的博客 7876

【音视频基础】一篇搞懂视频的各种封装格式

在现代多媒体处理中,视频封装格式扮演着至关重要的角色。不同的封装格式决定了视频文件的存储方式、兼容性以及功能特性。无论是观看高清视频、编辑电影剪辑,还是在互联网上流式传输内容,理解各种视频封装格式的基础知识都是必不可少的。在这篇文章中,我们将详细介绍常见的视频封装格式,探讨为什么需要这些格式,以及它们各自的功能和区别,帮助你在选择和使用视频格式时做出更明智的决定。WEBM理解各种视频封装格式的功能和区别对于选择合适的格式至关重要。

m0_62599305的博客 2479

RK35X8调试YT8531单网口千兆以太网PHY芯片,修复ping不通或者IP地址丢失的问题

RK35X8上调试YT8531以太网PHY

荻夜的博客 3976

排序——选择排序

前面的文章介绍了排序的概念,插入排序和交换排序,这篇文章则介绍一下选择排序的相关内容。

Blusher1的博客 2656

倍福EL5101模块连接编码器

1、 EL5101模块简介:EL5101为单通道增量型编码器计数模块,一共有EL5101-0000、EL5101-0010、EL5101-0011、EL5101-0090(尚未供货)四种型号,其中EL5101-0000比较常用,本例使用EL5101-0000连接增量型编码器 2、 硬件外观和接线 在这里插入图片描述 3、 指示灯说明 4、和编码器连接的案例 ......

weixin_41883890的博客 6501

排序算法:选择排序(直接选择排序、堆排序)

使用C语言实现的选择排序算法和堆排序算法,详细讲解了选择排序的实现逻辑,包含两个排序算法的完整代码,以及两个算法的效率比较。

Yikefore的博客 4249

【k8s故障处理篇】calico-node启动失败“Felix is not live: Get “http://localhost:9099/liveness” 解决办法(V1.30.3版本)

【k8s故障处理篇】calico-node启动失败“Felix is not live: Get “http://localhost:9099/liveness” 解决办法(V1.30.3版本)

jks212454的博客 1091

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

选择排序(选择排序,堆排序)

两种选择排序!

qq_52777887的博客 2189

廖雪峰Python教程[完整版]

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

选择类排序法 — 简单选择排序

9.4 选择类排序法 选择排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。我们主要介绍简单选择排序、树型选择排序和堆排序。    简单选择排序 简单选择排序的基本思想:第i趟简单选择排序是指通过n-i次关键字的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录进行交换。共需进行i-1趟比较,直到所有记录排序完成为止

Rprop 2万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

选择排序之简单选择排序

选择排序的原理:选择排序的主要操作是选择,主要思想:每趟排序在待排序序列中选择最小的元素记录,添加到有序序列中。选择排序主要有简单选择排序(直接选择排序)和堆排序,堆排序算法可以看作是简单选择排序算法的改进;这里主要介绍简单选择排序算法。...

m0_64529905的博客 3060

选择排序 简单选择排序 直接选择排序的区别

选择排序 图示过程如下:

weixin_40976389的博客 6512

排序之选择排序

一、直接选择排序 原理: 每一次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后(或最前),直到全部待排序的数据元素排完 。 代码实现: public void selectSort(int[] arr) { for(int i = 0;i < arr.length;i++) { int maxPos = 0; fo...

Sl_4397的博客 787

简单选择排序与直接选择排序

是对元素直接排序 而先获取到元素的最大值或最小值下标再进行交换每次遇到n-1>n 的时候就要发生交换;则只是记录下较大那个元素的位置,这样一轮过后这个记录变身本轮所要选取的最大值,而每轮需要确定的位置已由外层循环确定,只需将最大元素位置记录所对应的元素与要确定的位置交换机可。话不多说直接上代码演示。

orehrepuS的博客 3882

选择排序和二元选择排序

选择排序 思想: 在一个数组中,找到最小的数放在最前面,然后再在剩下的数中找到最小的放到第二位....以此类推 代码实现: #include<iostream> using namespace std; void swap(int& x, int& y)//交换函数 { int temp = 0; temp = x; x = y; y = temp; } v...

承泓风的博客 744

选择排序——二元选择排序

二元选择排序 核心思想: 选择一个当前位置i,从开始到序列一半位置。每次遍历产生一个最大值,一个最小值。 将产生的最小值和最大值分别与当前位置i和序列长度-i上的元素交换 时间复杂度: O(n^2) 适用场景: 适用于简单选择排序的适用的场所,且为简单选择排序的升级版,时间快一半左右 稳定性: 不稳定(因为选取后面最小的和前面交换,前面的元素可能被交换到相同元素的后面,最大元素交换也...

Y734493585的博客 1779

选择排序(简单选择排序和堆排序)

选择排序的基本思想:每一趟(例如第i趟)在后面n-i+1(i=1,2,…n-1)个待排序元素中选取关键字最小的元素,作为有序子序列的第i个元素,直到第n-1趟做完,待排序元素只剩下了1个,就不用再选了。 1.简单选择排序 简单排序算法思想:假设排序表为L[1…n],第i趟排序即从L[i…n]中选择关键字最小的元素与L(i)交换,每一趟排序可以确定一个元素的最终位置,这样经过n-1趟排序就可以使得整个排序表有序。代码如下: #include<cstdio> #include<iostream

xiaoyong5854的博客 1425

python选择排序_Python选择排序

python选择排序Here you’ll learn about python selection sort algorithm with program example. 在这里,您将通过程序示例了解python选择排序算法。 Selection sort is one of the easiest sorting algorithm out there. In Selection sor...

culing2941的博客 1815
上一篇: 求给定数组的最大子数组
下一篇: 冒泡排序
SmartBrave
博客等级 码龄12年 25粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值