数组排序之——选择排序

本文着重讲解选择排序:

原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。

举例:

数组排序之——选择排序

数组

如图,是五个无序的数据。接下来就需要使用选择排序将其进行排序。

思路:

  1. 先默认选定一个数据,认为是最小的。让其与后面的所有数据进行比较,如发现比自己更小的则交换位置,当本轮比较完成以后,前面的数据则变成最小的。

  2. 五个数据 默认比较四轮 就可以确定所有数据的顺序

演示过程:

第一轮比较:

默认选定下标为0的位置上的数据为最小的。让他与后面所有数据进行比较

数组排序之——选择排序

红色部分为第一轮

比较的位置为:

0-1 0-2 0-3 0-4

交换了下标为0和下标为1 的数据 ,发现2是在此数组中最小的数据,此时已经确定了下标为0的数据。 结 果为: 2,9,5,4,7

第二轮比较:

第二轮中我们可以选择下标为1 的位置默认为本轮最小数据,依次与后面数据进行对比。

数组排序之——选择排序

蓝色部分为第二轮

比较位置:

1-2 1-3 1-4

交换了下标为1和2 ,结果为 2,5,9,4,7

然后继续进行对比,又交换了下标为1和下标为3 结果为: 2,4,9,5,7

第三轮比较:

第三轮比较中默认把下标为2 最为最小值,依次跟后面数据进行比较

数组排序之——选择排序

绿色部分为第三轮

比较位置:

2-3 2-4

第三轮中 交换了 下标为2和3 结果为:2,4,5,9,7

第四轮:

默认选定下标为3的位置上的数据为最小的。让他与后面所有数据进行比较

数组排序之——选择排序

橙色部分为第四轮

比较位置:

3-4

比较了一次,交换了下标3和4位置上的数据,结果为: 2,4,5,7,9

至此:我们将这个无序数组变得有序。

总结规律:

1 五个数据比较四轮。比较轮数为 数组.Length-1

2 默认选择一个位置跟后面所有数据进行比较,所以每轮比较次数为

第一轮: 4次

第二轮: 3次

第三轮: 2次

第四轮: 1次

3 比较过程中发现后面数据比自己小的时候,进行数据交换

以上三条规律 则可以帮助我们来实现代码的推导:

数组排序之——选择排序

选择排序代码

至此为止,选择排序就已经实现了。

但是我们对于代码的效率的追求是无止境的。仔细观察会发现,在每轮比较中,都有可能交换多次数据。比如 第二轮中 ,先交换了 1 和 2的数据,然后又交换了 1和3的数据。这是因为2上面的数据虽然比1 小,但是 并不是后面最小的数据,3此时最小的。这样我们就涉及到 多次交换数据。为了提高执行效率,可以先当比较1和2的时候发现2是比1小,则默认把当前最小的数据变成2,让2与后面的3比较,如果发现3比2小,则 默认当前最小的数据为3 以此类推,当把所有数据 进行比较后会得到最小的数据。然后在进行交换数据。这样我们就看可以将交换数据的次数控制在 小于等于比较轮数的范围内。进而提高执行效率。

代码如下:

数组排序之——选择排序

优化后的选择排序

至此,优化后的代码实现。


分享到:


相關文章: