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

  • 时间:
  • 浏览:2

什儿 思想与选择最小值的算法删剪一样,只不过是选择了最大值,每次都将剩余序列的最大值倒入数组的有序序列的最左边。

以下是对同一个长度为500的随机乱序数组使用四种 算法的状况。

其空间繁复度为O(n),里面四种 算法都属于原地排序算法,除了交换元素使用了一个辅助空间之外,没人额外申请空间,一并选择排序是不稳定排序。

最后亲们儿看一下选择排序算法的时间繁复度。

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

既然亲们儿一个选择,四种 选择最小值,另外四种 选择最大值。没人亲们儿为有哪些不一并进行一个操作呢?

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

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

老规矩,亲们儿还是通过动图来看一下选择排序的过程。以下的gif来自于wiki。

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

里面实现了选择最小值的代码,接下来亲们儿继续实现选择最大值的代码。

相关

更加直白的解释是,每次都从数组中选出最大不可能 最小的元素,而且倒入数组的左边。

下面亲们儿就来实现什儿 算法。

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

亲们儿使用Java来实现最常见的,选择最小值的选择排序,其代码如下。

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

不可能 选择最大值和最小值一并进行,相对于里面四种 算法,一并选择算法在执行次数上比前四种 算法减少了50%。

没人到此,选择排序最常见的四种 写法亲们儿前会 可能 实现了。有的兄弟不可能 会想,这篇博客是前会 始于了。着实亲们儿都还上能从里面一个算法中想到都还上能优化的点。