首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

算法描述

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置;
  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾;
  3. 重复第二步,直到所有元素均排序完毕。

动图演示

选择排序(Selection Sort) - 图1

代码实现

  1. <?php
  2. class Sorting
  3. {
  4. /**
  5. * 选择排序(不稳定地原地排序算法)
  6. *
  7. * @param array $array
  8. * @return array
  9. */
  10. public function selectionSort(array $array): array
  11. {
  12. $length = count($array);
  13. for ($i = 0; $i < $length - 1; $i++) {
  14. $minIndex = $i;
  15. for ($j = $i + 1; $j < $length; $j++) {
  16. if ($array[$j] < $array[$minIndex]) {
  17. $minIndex = $j;
  18. }
  19. }
  20. $temp = $array[$i];
  21. $array[$i] = $array[$minIndex];
  22. $array[$minIndex] = $temp;
  23. }
  24. return $array;
  25. }
  26. }

算法分析

  • 时间复杂度:O(n2)
  • 空间复杂度:O(1)
  • 非稳定排序
  • 原地排序