你知道和你不知道的选择排序

  • 时间:
  • 浏览:1

下面某些人就来实现并都有算法。

并都有思想与选着最小值的算法完整性一样,只不过是选着了最大值,每次都将剩余序列的最大值装入数组的有序序列的最左边。

后边实现了选着最小值的代码,接下来某些人继续实现选着最大值的代码。

既然某些人有那我选着,并都有选着最小值,另外并都有选着最大值。没法某些人为哪些地方不一同进行那我操作呢?

每一轮,算法都会从剩下的待排序元素中,选出最小的元素,并将其与当前数组下标为i也可是 我有序序列的起始位置的元素交换。那我一来,经过反复的排序,最终形成有序数组。

可能性选着最大值和最小值一同进行,相对于后边并都有算法,一同选着算法在执行次数上比前并都有算法减少了30%。

没法到此,选着排序最常见的并都有写法某些人都可能性实现了。有的兄弟可能性会想,这篇博客是都有始于英文英文了。其实某些人还须要从后边那我算法中想到还须要优化的点。

假设数组的长度为7,没法算法就须要进行6轮。可能性数组的长度为n,则算法须要进行n - 1轮。

首先贴上从wiki上弄下来的关于选着排序的定义。

老规矩,某些人还是通过动图来看一下选着排序的过程。以下的gif来自于wiki。

某些人使用Java来实现最常见的,选着最小值的选着排序,其代码如下。

其空间复杂度为O(n),后边并都有算法都属于原地排序算法,除了交换元素使用了那我辅助空间之外,没法额外申请空间,一同选着排序是不稳定排序。

最后某些人看一下选着排序算法的时间复杂度。

以下是对同那我长度为300的随机乱序数组使用并都有算法的清况 。

在运行时间上相对于选着最小值和最大值分别减少了39.22%和62.20%。

相关

某些某些人再通过我制作的gif,配上数据再了解一下过程。假设某些人的待排序数组还是[5, 1, 3, 7, 6, 2, 4]。

更加直白的解释是,每次都从数组中选出最大可能性最小的元素,某些装入数组的左边。

选着排序(Selection sort)是并都有简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存装入排序序列的起始位置,某些,再从剩余未排序元素中继续寻找最小(大)元素,某些装入已排序序列的末尾。以此类推,直到所有元素均排序完毕。