13.3 选择排序

将整副牌洗乱后,你需要一个恢复排列顺序的方法。具有讽刺意义的是,有一种排序算法与洗牌算法类似。该排序算法被称为选择排序(selection sort),因为它反复遍历数组,每次都在余下的牌中选择最小(或最大)的那张。

在第一次迭代中,我们找到最小的牌,并将其与索引 0 处的牌互换位置;在第 i 次迭代中,我们在索引 i 右边的牌中找出最小的那张,并将其与索引 i 处的牌互换位置。下面是选择排序的伪代码:

  1. public void selectionSort() {
  2. for each index i {
  3. // 在整个数组或索引i右边的范围内找到最小的那张牌
  4. // 将索引i处的牌与找到的最小的牌互换位置
  5. }
  6. }

同样,这些伪代码可以帮助你设计辅助方法。在这个算法中,我们可以重用 swapCards,因此只需要一个找到最小牌的方法——我们称之为 indexLowest

本章末尾有一个练习,要求你编写辅助方法 indexLowest,并用它实现 selectionSort