首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的选择排序打印在与以前相同的位置?

选择排序是一种简单但低效的排序算法,它的基本思想是每次从未排序的元素中选择最小(或最大)的元素,然后将其放置在已排序序列的末尾。这个过程会不断重复,直到所有元素都被排序。

如果你发现选择排序打印的结果与以前相同的位置,可能有以下几个原因:

  1. 代码逻辑错误:首先需要检查你的选择排序算法的实现是否正确。可能存在一些逻辑错误导致排序结果不正确。你可以仔细检查代码,确保每一步的选择和交换都正确无误。
  2. 数据已经有序:如果你的数据已经是有序的,无论是升序还是降序,选择排序不会改变元素的相对位置。因此,如果你的数据已经有序,选择排序的结果将与原始顺序相同。
  3. 数据重复:如果你的数据中存在重复元素,并且你的选择排序算法没有处理重复元素的情况,那么排序结果可能会出现问题。在选择最小(或最大)元素时,你需要考虑如何处理重复元素,以确保它们被正确地放置在已排序序列的末尾。
  4. 数据量较小:选择排序的时间复杂度为O(n^2),在数据量较小的情况下,排序速度非常快。如果你的数据量很小,可能无法观察到排序结果的变化。

总之,如果你的选择排序打印结果与以前相同的位置,你应该仔细检查代码的实现逻辑,确保没有错误,并考虑数据的有序性、重复性以及数据量的大小对排序结果的影响。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

算法数据结构眼中样子(1)排序算法

今天和大家分享系统学习第一大类算法:排序算法,以前写博客时候总会说:排序算法是初恋,所以我印象很深。...以前专门找过从来没有学习过算法朋友,问他怎么给一个数组排序,他给我回答就是:先选出最小、再选出第 2 小、再选出第 3 小、…… ,这个描述就是「选择排序」。「选择」就这样记下来了。...看到过有一些朋友,把「选择排序」和「冒泡排序」搞混了: 「冒泡排序」每一轮的确是选出最值,但它是通过两两比较和交换,把最值元素逐步地交换到数组末尾; 「选择排序」每一轮选出最小值,一下子交换到数组前面...最开始学习「选择排序」「插入排序」「希尔排序」「冒泡排序时候,还觉得可以慢慢消化。...定稿之前,还删去了很多内容,希望这样串讲大家看起来不要太累就好。 有什么好意见和建议,都可以留言告诉

32530

不懂算法程序员不是好工程师--选择排序

原理 ---- 起始位置右侧(或左侧)找出最小那个元素,然后和起始位置元素交换。 选择排序是一个不稳定排序算法。...性能和特点 ---- 总体来说,选择排序是一种比较简单排序算法,很容易理解也很好用代码实现,当然他特点也很明显: 运行时间和数据初始状态无关 为什么这么说呢?...适用场景 由于选择排序对比次数平方级别,但是移动次数在线性级别,所以当N比较小时候比较适用。 其他 为什么选择排序不稳定呢? 首先我们要明白算法稳定是什么意思呢?...排序数据中,存在多个相同数据,经过排序之后,他们相对顺序依旧保持不变,实际上就是说array[i]=array[j],i<j.就是array[i]array[j]之前,那么经过排序之后array...:“明明都看到地毯底下钱了,为什么不让我拿出来!”

44620
  • 排序篇】插入排序选择排序

    稳定性:假如在待排序记录序列中,存在多个具有相同关键字记录中,如果经过排序,这些记录相对次序保存不变,就是说原序列中,r[i] = r[j],且r[i]r[j]前,然后在后序排序后,r[i]...2]排序码顺序进行比较,找到插入位置便将array[i]插入,原来位置元素顺序后移。...下面是一些介绍希尔排序书籍: 《数据结构(C语言版)》 — 严蔚敏 《数据结构-用面向对象方法C++描述》 – 殷人昆 2.2 选择排序 2.2.1 基本思想 每一次从待排序数据元素中选出最小...2.2.2 直接选择排序 元素集合array[i]—array[n-1]中选择关键码最大/小数据元素。...为了只有由后往前向下调整就可以了,第一次要传参数就是最后一个节点父节点。然后依次传入前面是位置就可以了。

    9110

    PHP 面试踩过坑(二)「建议收藏」

    即,每当两相邻数比较后发现它们排序排序要求相反时,就将它们互换。...选择排序 思路分析:在要排序一组数中,选出最小一个数第一个位置数交换。然后剩下数当中再找最小第二个位置数交换,如此循环到倒数第二个数和最后一个数比较为止。...如果发现最小值位置当前假设位置$i不同,则位置互换即可。 if($p !...例如: 如果需要在早晨从家里出发去上班,可以有几个策略考虑:可以乘坐地铁,乘坐公交车,走路或其它途径。每个策略可以得到相同结果,但是使用了不同资源。...那么为什么要使用PHP单例模式? PHP一个主要应用场合就是应用程序数据库打交道场景,一个应用中会存在大量数据库操作,针对数据库句柄连接数据库行为,使用单例模式可以避免大量new操作。

    40720

    快速排序你真的会了吗?

    还是以前面提到数组为例,我们找到三者后,对三者进行排序如下: 排序前 ? 排序后 ?...如果前面的描述还不清楚,我们看一看实际中一趟完整流程是什么样。 第一步,将左端,右端和中间值排序,中值作为基准: ? 第二步,将中值倒数第二个数交换位置: ?...我们需要在数据量小于一定值时候,就不再继续进行分区操作了,而是选择插入排序为什么?)。 那么问题来了,如何选择大小呢?...注:假定在待排序记录序列中,存在多个具有相同关键字记录,若经过排序,这些记录相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]r[j]之前,而在排序序列中,r[i]仍在r[j]...思考 为什么要在遇到相同元素时就进行扫描? 插入排序最好情况时间复杂度是多少,什么情况下出现? 文中实现代码还有哪些可以优化地方?

    61320

    大佬快速排序算法,果然不一样

    还是以前面提到数组为例,我们找到三者后,对三者进行排序如下: 排序前 ? 排序后 ?...如果前面的描述还不清楚,我们看一看实际中一趟完整流程是什么样。 第一步,将左端,右端和中间值排序,中值作为基准: ? 第二步,将中值倒数第二个数交换位置: ?...我们需要在数据量小于一定值时候,就不再继续进行分区操作了,而是选择插入排序为什么?)。 那么问题来了,如何选择大小呢?...注:假定在待排序记录序列中,存在多个具有相同关键字记录,若经过排序,这些记录相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]r[j]之前,而在排序序列中,r[i]仍在r[j]...问题思考 为什么要在遇到相同元素时就进行扫描? 插入排序最好情况时间复杂度是多少,什么情况下出现? 文中实现代码还有哪些可以优化地方?

    59820

    sort命令详解及Nginx统计运用

    -t   指定排序时所用栏位分隔字符。   -k  选择以哪个区间进行排序。...(如果你愿意,可以一直这么写下去,设定很多个排序优先级) 5 想让facebook.txt按照员工工资降序排序,如果员工人数相同,则按照公司人数升序排序:(这个有点难度喽) $ sort -n -t...d表示对本域按照字典顺序排序(即,只考虑空白和字母)。 f表示对本域忽略大小写进行排序。 i表示忽略“不可打印字符”,只针对可打印字符进行排序。...因此0 3肯定是第一个。10 5肯定是最后一个。但为什么00 5却在00 4前面呢?(你可以自己做实验思考一下。)...最最重要一点是,这种方式方法是从0开始计数以前所说第一个域,在此被表示为第0个域。以前第2个字符,在此表示为第1个字符。明白?)

    1.3K10

    shell之sort命令

    4  想让facebook.txt按照公司人数排序 ,人数相同按照员工平均工资升序排序: $ sort -n -t ‘ ‘ -k 2 -k 3 facebook.txt guge 50 3000 sohu...(如果你愿意,可以一直这么写下去,设定很多个排序优先级) 5 想让facebook.txt按照员工工资降序排序,如果员工人数相同,则按照公司人数升序排序:(这个有点难度喽) $ sort -n -t...d表示对本域按照字典顺序排序(即,只考虑空白和字母)。 f表示对本域忽略大小写进行排序。 i表示忽略“不可打印字符”,只针对可打印字符进行排序。...因此0 3肯定是第一个。10 5肯定是最后一个。但为什么00 5却在00 4前面呢?(你可以自己做实验思考一下。)...最最重要一点是,这种方式方法是从0开始计数以前所说第一个域,在此被表示为第0个域。以前第2个字符,在此表示为第1个字符。明白?)

    95470

    算法笔记汇总精简版下载_算法数据结构笔记

    4.复杂度描述是算法执行时间(或占用空间)数据规模增长关系。 二、为什么要进行复杂度分析? 1.和性能测试相比,复杂度分析有不依赖执行环境、成本低、效率高、易操作、指导性强特点。...为了保证冒泡排序算法稳定性,当有相邻两个元素大小相等时候,我们不做交换,相同大小数据排序前后不会改变顺序,所以冒泡排序是稳定排序算法。 * Q:第三,冒泡排序时间复杂度是多少?...【选择排序(Selection Sort)】 选择排序算法实现思路有点类似插入排序,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小元素,将其放到已排序区间末尾。...通用排序函数实现技巧 1.数据量不大时,可以采取用时间换空间思路 2.数据量大时,优化快排分区点选择 3.防止堆栈溢出,可以选择堆上手动模拟调用栈解决 4.排序区间中,当元素个数小于某个常数是,...查找插入位置过程中,如果碰到一个节点值,要插入数据相同,我们就将这个要插入数据放到这个节点右子树,也就是说,把这个新插入数据当作大于这个节点值来处理。

    88910

    【转】STL之二分查找 (Binary search in STL)

    当一个区间被排序,优先选择B组,因为他们提供对数时间效率。而A则是线性时间。...返回迭代器间距离迭代器中对象数目是相等,对于排序区间,他完成了count和find双重任务 Section II binary search in STL     如果在C++ STL容器中包含了有序序列...其中: 假定相同元素可能有多个 lower_bound 返回第一个符合条件元素位置 upper_bound 返回最后一个符合条件元素位置 equal_range 返回所有等于指定值头/尾元素位置...条款44详细说明了为什么它们是更好选择,简要地说,是因为它们更快行为更自然。...幸运是,成员函数通常和相应算法有同样名字,所以前面的讨论推荐你使用算法count、find、equal_range、lower_bound或upper_bound,搜索关联容器时你都可以简单用同名成员函数来代替

    1.3K10

    为实习准备数据结构(1)-- 详尽数组篇

    今晚打开LeetCode,看到以前写过一道题,想着写个循环,突然发现只会写for i in XXX了,这时候知道,问题有点严重了。 第一篇不是指针,直到倒数第二篇也不会出指针,放心吧。...(期间会重用一些以前写过,不过会把以前删掉) 刚看到一句话挺好玩: 曾经一位老师跟我说“如果你没有努力钻研情况下灵光一闪就有了一个绝妙想法,多半是读书少。”...组成数组各个变量称为数组分量,也称为数组元素,有时也称为下标变量。数组是程序设计中,为了处理方便, 把具有相同类型若干变量按有序形式组织起来一种形式。...解释: [在这里插入图片描述] 其实也不知道为什么不把这个问题给办了,所以就参考前边那句话吧,读书少,不要问我。...喜欢称它们为头尾指针。 也不知道为什么有人要就这些区别长篇大论。 begin():指向容器第一个元素地址。 front():指向容器第一个元素值。

    49100

    计算机小白成长历程——数组(3)

    下面我们一起来看一下这个代码运行结果: 在这个结果中我们可以得到一下结论: 通过数组数组名,可以将数组内元素给打印出来; 数组名代表是一个地址; 数组名地址数组首元素地址相同一维数组中我们有介绍过数组中元素在内存中是由低地址到高地址连续存放...对这个知识点还有一个理解,这里分享给大家: 我们在用指针角度来看待数组名地址首元素地址相同这个问题时,数组名此时就相当于是存放了首元素地址一个指针,所以我们可以通过数组名来访问元素地址。...当数组被取地址时,虽然打印出来地址首元素地址相同,但是我们经过测试得知,它与数组名打印出来地址是两回事儿。...下面来给大家解析一下编写思路: 为了完成冒泡排序需要让元素跟所有元素去进行比较,比较顺序有两种,从第一个元素开始,也可以从最后一个元素开始,这里选择是从第一个元素开始; 确定比较顺序之后...,下面我们就顺着这个思路去编写代码: //冒泡排序 //排序功能不需要返回值 //因为数组传参传来是首元素地址,这里可以通过指针接收,也可以通过数组来接收,选择用数组接收 int sort(int

    13630

    算法分类 ,时间复杂度 ,空间复杂度,优

    ,这些都是新手入门必须要了解,你可以不会,但是你必须要知道他是怎么做到,原理是什么,今天就给大家讲一讲我们常用冒泡排序,选择排序,这两个排序算法, 1,冒泡排序(Bubble Sort), 为什么叫他冒泡排序呢...(selection sort)     选择排序(selection sort)是一种简单直观排序方法, 他原理是在要排序数列中找到最 大 或者最 小 元素,放在列表起始位置,然后从其他里找到第二大...,然后第三大,依次排序, 依次类,直到排完,     选择排序优点是数据移动, 排序中,每个元素交换时,至少有一个元素移动,因此N个元素进行排序,就会移动 1--N 次,在所有依靠移动元素来排序算法中...,选择排序是比较优秀一种 选择排序时间复杂度稳定性: 最优时间复杂度: O(n2) 最坏时间复杂度:O(n2) 算法稳定性 :不稳定(考虑每次升序选择最大时候) # if...,那么没有必要深究,因为用真的很少 优化算法 这边带来了代码,你们复制下来了python上运行一下,看一下用时间不同, 自然就懂了, 这是未优化算法   '' 已知有a,b,c三个数,都是0-

    71430

    数据结构-树结构

    这也是为什么完全二叉树会单独拎出来原因,也是为什么完全二叉树要求最后一层子节点都靠左原因。 当我们讲到堆和堆排序时候,你会发现,堆其实就是一种完全二叉树,最常用存储方式就是数组。...那如果存储两个对象键值相同,这种情况该怎么处理呢?这里有两种解决方法。 第一种方法比较容易。...查找插入位置过程中,如果碰到一个节点值,要插入数据相同,我们就将这个要插入数据放到这个节点右子树,也就是说,把这个新插入数据当作大于这个节点值来处理。...认为有下面几个原因: 第一,散列表中数据是无序存储,如果要输出有序数据,需要先进行排序。而对于二叉查找树来说,我们只需要中序遍历,就可以 O(n) 时间复杂度内,输出有序数据序列。...综合这几点,平衡二叉查找树某些方面还是优于散列表,所以,这两者存在并不冲突。我们实际开发过程中,需要结合具体需求来选择使用哪一个。

    1.9K10

    排序篇】七大排序算法汇总

    稳定性:假如在待排序记录序列中,存在多个具有相同关键字记录中,如果经过排序,这些记录相对次序保存不变,就是说原序列中,r[i] = r[j],且r[i]r[j]前,然后在后序排序后,r[i]...2.2.2 直接选择排序 元素集合array[i]—array[n-1]中选择关键码最大/小数据元素。...为了只有由后往前向下调整就可以了,第一次要传参数就是最后一个节点父节点。然后依次传入前面是位置就可以了。...因为已经找到数组最大元素并放置末尾,也就是说最大元素已经放置最终位置,我们接下来就是把末尾提前来来一次找到数组中次大元素,以此类推将数组彻底排序。...为此我们只需要用一个容器来存储这些区间就可以了,众多数据结构中选择利用栈来实现这个方法,如果你要用队列也可以,只是存储区间而已。那么如何获取这些区间呢?

    6610

    通过示例学 Golang 2020 中文版【翻译完成】

    了解模块名称或模块导入路径 模块供应商依赖关系 了解go.sum和go.mod文件 包模块 移除模块依赖关系 初始化函数 Golang 程序执行顺序 嵌套包 包名和目录/文件夹名——它们需要相同吗...,直到活动或事件完成 选择 select语句 for循环中select语句 带有默认情况选择 使用发送操作选择 使用nil通道select语句 selectswitch select语句中...码/值 迭代字符串 字符串长度 字符 ASCII 数字 字符串中写入或打印反斜杠 打印带双引号字符串 排序字符串 数学 数字上限 数字下限 获取浮点数整数值 数字舍入 偶数舍入 移除浮点数小数点...,找出最接近目标数和 查找int数组中第一个缺少正整数 排序和旋转数组中查找枢轴索引 排序和旋转数组中搜索 查找排序数组中目标元素第一个和最后一个位置 雨水收集问题 组合异序词 合并重叠间隔...通用程序 中缀到后缀转换 后缀表达式求值 排序算法 堆排序 插入排序 选择排序 冒泡排序 网络 验证 IP 地址 检查 IP 地址是 IPV4 还是 IPV6 从传入 HTTP 请求中获取

    6.2K50

    排序算法-上(Java语言实现)

    思考题:插入排序和冒泡排序时间复杂度相同,都是 image.png ,实际软件开发里,为什么我们更倾向于使用插入排序算法而不是冒泡排序算法呢? 如何分析一个“排序算法”?...当我们需要将一个数据 a 插入到已排序区间时,需要拿 a 排序区间元素依次比较大小,找到合适插入位置。...第二,插入排序是稳定排序算法吗? 插入排序中,对于值相同元素,我们可以选择将后面出现元素,插入到前面出现元素后面,这样就可以保持原有的前后顺序不变,所以插入排序是稳定排序算法。...这个问题着重来说一下。答案是否定选择排序是一种不稳定排序算法。从前面画那张图中,你可以看出来,选择排序每次都要找剩余未排序元素中最小值,并和前面的元素交换位置,这样破坏了稳定性。...比如 5,8,5,2,9 这样一组数据,使用选择排序算法来排序的话,第一次找到最小元素 2,第一个 5 交换位置,那第一个 5 和中间 5 顺序就变了,所以就不稳定了。

    34420

    【数据结构】堆排序TOP-K问题

    1.堆排序排序就是利用堆思想进行排序,总共分为两个步骤: 1.1 建堆 升序:建大堆 降序:建小堆 利用向下调整建堆 提问:为什么向下调整可以建堆 回答: 向下调整关键就除了要调节地方不对...以下图为例:以10为根左右子树,都满足小堆(堆)性质,只有根节点不满足时,因此只需将根节点往下调,整合到合适位置就可以了。...为了只有由后往前向下调整就可以了,第一次要传参数就是最后一个节点父节点。然后依次传入前面是位置就可以了。...回答:堆排序本质是选择排序,每次都要选择一个最大数到数组最后一位,那么问题就变成了如何选择最大数到数组最后一位,要找出堆中最大数就必须要用到大堆,因为大堆中最大数就在堆堆顶,通过一次次选择就可以将数组排序...个元素依次堆顶元素比完后,堆中剩余K个元素就是所求得前K个最小或者最大元素。

    6610

    四种简单排序算法

    最后,为了使程序简单,对于数组为空情况并没有做处理。 1.插入排序 算法思想 插入排序使用了两层嵌套循环,逐个处理待排序记录。每个记录前面已经排好序记录序列进行比较,并将其插入到合适位置。...算法思想 选择排序是对冒泡排序一个改进,从上面冒泡排序输出可以看出,第一趟时,为了将最小值13由数组末尾冒泡数组下标为0第一个位置,进行了多次交换。...选择排序思路是:对于第一趟,搜索整个数组,寻找出最小,然后放置在数组0号位置;对于第二趟,搜索数组n-1个记录,寻找出最小(对于整个数组来说则是次小),然后放置到数组第1号位置。...第i趟时,搜索数组n-i+1个记录,寻找最小记录(对于整个数组来说则是第i小),然后放在数组i-1位置(注意数组以0起始)。可以看出,选择排序显著减少了交换次数。...需要注意地方是:第i趟时,内层循环并不需要递减到1位置,只要循环到i相同就可以了,因为之前位置一定都比它小(也就是第i小)。

    61220

    Java数组篇:数组定义和声明

    小伙伴们批阅过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者写作道路上最好鼓励支持!...接着,通过使用案例分享和应用场景案例,进一步说明了数组实际编程中应用。文章还对数组优缺点进行了分析,并介绍了Java中数组相关一些核心类和方法。...int index = Arrays.binarySearch(numbers, 30);:使用Arrays类binarySearch方法排序数组numbers中查找元素30索引位置。...当这段代码被执行时,它首先会打印出原始数组,然后是排序数组,最后是元素30索引位置。由于数组排序后30是第一个元素,因此binarySearch方法将返回0作为索引值。  ...通过Arrays类提供方法,我们可以方便地对数组进行各种操作。设计程序时,合理地选择和使用数组,可以提高程序性能和可读性。...

    24221
    领券