
1.3.2 简单选择排序
接下来介绍另一种排序方式——简单选择排序,简单选择排序就是不断地选择未排序的第一个数字,其目的是每次将最小的数字通过不断的比较选择出来。如果是从小到大排序,那么第一次会将最小的选择出来,第二次会将次小的选择出来,以此类推,直到整个数组都排序完成。现在我们还是对数字5,4,3,1,2进行排序,通过图例讲解简单选择排序。
(1)我们开始第一次选择,第一次选择的目的是将最小的数字1选择到数组的底部,选择策略就是不断和第一个数进行比较,如果后面的数比第一个数小就交换,否则不做处理,通过不断的选择将数字选择出来。第一次是5和4比较,因为5比4大,所以进行交换,交换完成后的排序是4,5,3,1,2;第二次是4和3比较,因为4比3大,所以交换,交换完成后的排序是3,5,4,1,2;第三次是3和1比较,因为3比1大,所以交换,交换完成后的排序是1,5,4,3,2;第四次是1和2比较,因为1比2小,所以不交换,排序依然是1,5,4,3,2,这样最小的数字1就选择了出来,如图1.15所示。

图1.15 第一次选择排序
(2)我们要开始第二次选择,经过第一次选择排序,现在的数字序列是1,5,4,3,2。第二次选择的目的是将次小的数字2选择到数组的次底部,选择的策略还是一样,不断地和第二个数比较,如果后面的数比第二个数小就交换,否则不做处理,通过不断的比较将数字选择出来。第一次是5和4比较,因为5比4大,所以进行交换,交换完成后的排序是1,4,5,3,2;第二次是4和3比较,因为4比3大,所以交换,交换完成后的排序是1,3,5,4,2;第三次是3和2比较,因为3比2大,所以交换,交换完成后的排序是1,2,5,4,3。这样次小的数字2就选择出来了,如图1.16所示。

图1.16 第二次选择排序
(3)我们要开始第三次选择排序,经过第二次选择排序,现在的数字序列是1,2,5,4,3。第三次选择的目的是将剩下未排序的最小数字3选择到数组的相应位置,选择的策略还是一样,不断地和第三个数比较,如果后面的数比第三个数小就交换,否则不做处理,通过不断的比较将数字选择出来。第一次是5和4比较,因为5比4大,所以进行交换,交换完成后的排序是1,2,4,5,3;第二次是4和3比较,因为4比3大,所以交换,交换完成后的排序是1,2,3,5,4。这样第三小的数字3就选择出来了,如图1.17所示。
(4)我们要开始第四次选择排序,经过第三次选择排序,现在的数字序列是1,2,3,5,4。第四次选择的目的是将剩下未排序的最小的数字4选择到数组的相应位置,选择的策略还是一样,不断地和第四个数比较,如果后面的数比第四个数小就交换,否则不做处理,通过不断的比较将数字选择出来。第一次是5和4比较,因为5比4大,所以进行交换,交换完成后的排序是1,2,3,4,5。这样第四小的数字4就选择出来了,如图1.18所示。

图1.17 第三次选择排序

图1.18 第四次选择排序
通过上面的图解,相信大家对选择排序算法已经有了了解,选择排序算法的实质就是对数组固定位置上的元素不断进行比较,选择最小的元素放入,那么接下来我们就要通过程序来实现简单选择排序,把整个选择过程通过程序体现出来。选择排序算法完整代码如下。


简单选择排序运行结果如图1.19所示。

图1.19 简单选择排序运行结果
可以发现,程序的运行结果和前面的分析结果是一致的。我们已经成功地通过程序将简单选择排序的内部细节进行了展示。简单选择排序属于选择排序中的一种,上面的图解及程序每次将无序部分的最小元素移动到有序部分的尾部,从而达到排序的目的。