摘要:以此类推,直到所有元素均排序完毕。老师说,队列都给你们排好了,小明同学也又很好的阐述了思想,你们把代码实现以下吧哈哈哈。
一、说在前面
一直想写一些简单易懂的文章,因为平时看的很多的书籍或者文章都是看着很难受的感觉,当然,这并不是说书籍写的不好,只是说对于一些没有太多基础或者基础不是很好的来说,相对来说还是比较难以理解的。
这个系列主要是写一些简单易懂的数据结构与算法的文章,同时也是帮助自己再理解理解这方面的知识。
作为数据结构与算法的开篇,还是以排序算法作为第一部分的内容,需要注意的是,这一系列的文章并不是涉及到很多理论性质的知识,因为前面说了,主要还是希望文章是简单易懂的,希望能达到读故事的感觉。如果需要去学习理论性质的知识,可以去查看相关的数据结构与算法的书籍。
二、选择排序算法今天早上,老师又叫我们去操场上做早操,做早操之前呢,今天也需要排队,到操场的同学有5个人,今天的排序方法还是按照身高由低到高排列。
但是,今天老师说换一种方法排队,我来给你们排队,昨天你们排队太慢了。
于是,老师说:第一个同学站在原地不要动。
然后,我从后面4个同学当中挑一个最矮的同学,这个同学站在第一个同学后面,你们两个站在原地不要动。
之后,老师再从后面3个同学里面挑一个最矮的同学,然后让他站在前面两个排好的同学后面,这样这三个同学就排好了,你们站着不要动。
老师又从最后两个同学中挑一个最矮的同学,让他站在前面三个已经排好的队伍后面,这样,这四个同学就排好队列,这四个同学站着不要动。
四个同学排好了,只有最后一个同学了,然后,这个同学自己站到前面四个已经排好队的队伍的最后,这样5个同学的位置就排好了。
老师看到排好了队,非常开心,对同学们说:“我排队是不是比你们自己排队快啊!”
然后,这位程序员老师说,哪位同学懂了刚刚我给你们排队的思想,能不能叙述一下,这时候,小明说:我会!,于是,小明说了一下思想:
初始时在队伍中找到最小(大)元素,放到队伍的起始位置作为已排好队伍;然后,再从剩余未排序队伍中继续寻找最小(大)元素,放到已排序队伍的末尾。以此类推,直到所有元素均排序完毕。
老师说,队列都给你们排好了,小明同学也又很好的阐述了思想,你们把代码实现以下吧(哈哈哈!)。
于是,小海同学就去按照老师的排队方法,实现了选择排序算法
public static void selectionSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for (int i = 0; i < arr.length - 1; i++) { int minIndex = i; for (int j = i + 1; j < arr.length; j++) { //在待排序区选择最小的元素 minIndex = arr[j] < arr[minIndex] ? j : minIndex; } swap(arr, i, minIndex);// 放到已排序序列的末尾,该操作很有可能把稳定性打乱,所以选择排序是不稳定的排序算法 } } public static void swap(int[] arr, int i, int j) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; }
最差时间复杂度:O(n^2)
最优时间复杂度:O(n^2)
平均时间复杂度: O(n^2)
所需辅助空间:O(1)
稳定性:不稳定
文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/75721.html
摘要:二冒泡排序算法作为这一系列的第一部分,主要讲解排序算法。直到队列全部排好为止。到这里,我想你应该明白了冒泡排序的思想了。 一、说在前面 一直想写一些简单易懂的文章,因为平时看的很多的书籍或者文章都是看着很难受的感觉,当然,这并不是说书籍写的不好,只是说对于一些没有太多基础或者基础不是很好的来说,相对来说还是比较难以理解的。 这个系列主要是写一些简单易懂的数据结构与算法的文章,同时也是帮...
摘要:听了鹏哥的教导,也开始写起了博客现在多粉,感觉都是机器人哈哈,最近粉丝也不涨了,不知道是不是我最近不发文章的原因。这一个多月,基本就是学刷算法题。在这里不得不吐槽一下学校,每条早上做早操,晚自习到点,感觉浪费了我很多学习技术的时间。 ...
摘要:基本介绍选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。而移动次数与序列的初始排序有关。空间复杂度简单选择排序需要占用个临时空间,在交换数值时使用。 showImg(https://img-blog.csdnimg.cn/20190509221741422.gif); showImg(https://segmentfault....
摘要:经过一次冒泡排序,最终在无序表中找到一个最大值,第一次冒泡结束。也是我们后面要说的冒泡排序的优化。冒泡排序只执行第一层循环,而不会执行第二层循环。因此冒泡排序的时间复杂度是。 showImg(https://user-gold-cdn.xitu.io/2019/6/19/16b6f986df6880f9?w=640&h=142&f=gif&s=17175);showImg(https:...
摘要:选择排序是下一章将介绍的快速排序的基石。需要存储多项数据时有两种基本方式数组和链表。但它们并非都适用于所有的情形因此知道它们的差别很重要。选择排序是一种灵巧的算法但其速度不是很快。 选择排序是下一章将介绍的快速排序的基石。 内存的工作原理 计算机就像是很多抽屉的集合体,每个抽屉都有地址。showImg(https://segmentfault.com/img/bVbpWvv?w=413...
阅读 931·2021-09-26 09:55
阅读 3174·2021-09-22 15:36
阅读 2949·2021-09-04 16:48
阅读 3118·2021-09-01 11:41
阅读 2572·2019-08-30 13:49
阅读 1472·2019-08-29 18:46
阅读 3528·2019-08-29 17:28
阅读 3409·2019-08-29 14:11