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

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

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

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

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

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

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

相关·内容

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

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

29930

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

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

42620

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

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

39420

快速排序你真的会了吗?

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

59420

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

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

58020

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.2K10

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

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

85610

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个字符。明白?)

92570

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

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

12230

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

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

69230

【转】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.2K10

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

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

47500

数据结构-树结构

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

1.8K10

通过示例学 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 顺序就变了,所以就不稳定了。

32820

四种简单排序算法

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

59620

【面经1】算法工程师实习校招面经 (上篇)

将个人面试过程中遇到问题简单分为深度学习、机器学习、图像处理、数学基础、数据结构算法基础、程序设计语言、模型部署、HR面试以及与我本人简历相关目标检测、属性识别、Kaggle及天池比赛、创新想法等几个部分介绍...softmax原理,softmax得出结果是排序么,为什么分类用交叉熵 为什么使用smooth l1 2.2.4 过拟合/欠拟合 为什么会出现过拟合欠拟合 如何判断 预防方法 正则化为什么有效,具体怎么做...n-1个后门是羊,你先选一个,如果面试官告诉你其余n-1个中某个是羊,你会重新选择么(假设n为3) 你先选一个,概率1/n; 面试官告诉你某个不是,你剩余中选概率为两部分:(1)你选那个是,则概率...5.1 xn次方(x任意,n自然数) 5.2 链表排序(不能动指针) 5.3 螺旋打印二维数组 5.4 删除字符 给定一个字符串和一个数字,删除指定数字个数字符,并保证删除 给定字符串和数字 abcdabcd...list参数传递:如果list函数里改变,原来list是否改变 7.2 C++ 指针引用区别 继承多态 数组和链表 内存泄漏和溢出 八、模型部署 8.1 tensorrt内部机制 tensorrt

68130

Java数组,这一篇文章就真够了

使用数组过程中,你是否汇总过数组特性及功能,并停下来思考几个为什么呢?如果没有,本篇文章将带领大家从头梳理一下数组,一定会为你带来一些未曾发掘特性和功能。...拓展一下:我们可以通过方式二形式进行数组创建和初始化,那么为什么还提供了int[] a这种基于数组引用声明呢? 这是因为Java中,可以将一个数组引用赋值给另外一个数组。...为什么String可以直接进行排序?那是因为String已经实现了Comparable接口。...:冒泡排序、快速排序选择排序、插入排序、希尔(Shell)排序、堆排序等。...: 1 b 结果中"1"指的是字符串所在下标值,通过下标可以获得对应位置值。

1.1K10

前端应该如何准备数据结构和算法?

键转换为地址是通过一种关系(公式)来完成,这就是哈希(散列)函数。 虽然哈希表是一种有效搜索技术,但是它还有些缺点。两个不同关键字,由于哈希函数值相同,因而被映射到同一表位置上。该现象称为冲突。...快速排序 选择一个目标值,比目标值小放左边,比目标值大放右边,目标值位置已排好,将左右两侧再进行快排。 归并排序 将大序列二分成小序列,将小序列排序后再将排序小序列归并成大序列。...6.8.1 买卖股票类问题 买卖股票最佳时机 II 买卖股票最佳时机含手续费 6.8.2 货币选择问题 零钱兑换 零钱兑换 II 6.9 贪心算法、动态规划、回溯区别 贪心算法动态规划不同在于它对每个子问题解决方案都作出选择...,不能回退,动态规划则会保存以前运算结果,并根据以前结果对当前进行选择,有回退功能,而回溯算法就是大量重复计算来获得最优解。...七、前端编码能力 这部分是前端开发贴近最紧密一部分了,写业务代码同时,我们也应该关心一些类库或框架内部实现。

59920

前端应该如何准备数据结构和算法?

键转换为地址是通过一种关系(公式)来完成,这就是哈希(散列)函数。 虽然哈希表是一种有效搜索技术,但是它还有些缺点。两个不同关键字,由于哈希函数值相同,因而被映射到同一表位置上。该现象称为冲突。...快速排序 选择一个目标值,比目标值小放左边,比目标值大放右边,目标值位置已排好,将左右两侧再进行快排。 归并排序 将大序列二分成小序列,将小序列排序后再将排序小序列归并成大序列。...6.8.1 买卖股票类问题 买卖股票最佳时机 II 买卖股票最佳时机含手续费 6.8.2 货币选择问题 零钱兑换 零钱兑换 II 6.9 贪心算法、动态规划、回溯区别 贪心算法动态规划不同在于它对每个子问题解决方案都作出选择...,不能回退,动态规划则会保存以前运算结果,并根据以前结果对当前进行选择,有回退功能,而回溯算法就是大量重复计算来获得最优解。...七、前端编码能力 这部分是前端开发贴近最紧密一部分了,写业务代码同时,我们也应该关心一些类库或框架内部实现。

92630
领券