PHP 常用例子

选择排序的思想是在未排序数组中查找最小或最大元素,并将其放置在已排序数组中的正确位置。这将导致每次迭代后将已排序数组的长度增加 1,并将未排序数组的长度减少 1。

示例:

为了理解选择排序,让我们考虑一下未排序的数组 [1, 10, 23, -2] 并讨论按升序对数组进行排序所采取的每个步骤。在每次遍历中,都会在未排序的数组中找到最小的元素,并与未排序的数组的第一个元素交换。

第一遍:整个数组未排序数组,(-2) 是数组中最小的数字。找到(-2)作为最小数字后,将其与数组的第一个元素交换。

第二遍: 在此示例中,左侧数组是排序数组,并且该数组的长度在每次迭代后增加一。第一次传递后,排序数组的长度为 1。数组的其余部分是未排序的数组。 (1) 是未排序数组中的最小数字,与未排序数组的第一个元素交换。交换后,排序数组和未排序数组的长度将为 2。

第三遍: (10)是未排序数组中的最小数字,并与未排序数组的第一个元素交换。

第四遍: (23) 是未排序数组中唯一位于正确位置的数字。

PHP程序 选择排序

选择排序的实现

<?php
//选择排序函数
function selectionsort(&$Array, $n) {
  for($i=0; $i<$n; $i++) {
    $min_idx = $i;

    for($j=$i+1; $j<$n; $j++) {
      if($Array[$j] < $Array[$min_idx])
      {$min_idx = $j;}
    }

    $temp = $Array[$min_idx];
    $Array[$min_idx] = $Array[$i];
    $Array[$i] = $temp;
  }
}

//打印数组的函数
function PrintArray($Array, $n) { 
  for ($i = 0; $i < $n; $i++) 
    echo $Array[$i]." ";
  echo "\n"; 
}  

//测试代码
$MyArray = array(1, 10, 23, 50, 4, 9, -4);
$n = sizeof($MyArray); 
echo "原始数组\n";
PrintArray($MyArray, $n);

selectionsort($MyArray, $n);
echo "\n排序数组\n";
PrintArray($MyArray, $n);
?> 

上面的代码将给出以下输出:

原始数组
1 10 23 50 4 9 -4 

排序数组
-4 1 4 9 10 23 50 

时间复杂度:

即使整个数组已排序,选择排序的时间复杂度在所有情况下都是θ(N²),因为整个数组需要对每个元素进行迭代,并且它包含两个嵌套。