微信搜索【程序员囧辉】,关注这个坚持分享技术干货的程序员。
前言
上一次,我们介绍了排序算法中“龟速三兄弟”的二哥“插入排序”。今天,我们继续介绍“龟速三兄弟”中的小弟——“选择排序”。和二哥“插入排序”一样,由于同样是“龟速三兄弟”中的一员,但是处理过程没有大哥“冒泡排序”那么简单明了,因此有不少人可能都没接触过“选择排序”,本文将通过例子来介绍“选择排序”的完整过程。
基本思想
每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
-
第一次循环时,i = 0,首先将代表着“最小值下标”的minIndex赋值为第一个数字的数组下标,即minIndex = 0。然后从第2个元素开始与array[minIndex]进行比较,如果有比array[minIndex]小的数,则将minIndex赋值为这个数的下标。当所有元素比较完后,再将array[0]与array[minIndex]交换位置,则arary[0]的值即为最小的数。
-
第二次循环时,从array[1]开始处理,最后比较出最小的数与array[1]交换位置,过程同步骤1。
-
直至处理完倒数第二个,结束处理。
例子
下面通过一个例子来看看快速排序是怎么工作的,红色为交换位置的数字。原数组如下。
0 |
1 |
2 |
3 |
19 |
15 |
37 |
12 |
第一次循环:
-
先用minIndex记录下当次遍历数据最小的数的下标,当前为0。然后比较array[1]与array[minIndex]&