PHP实现四种排序-选择排序

代码实现:

/**
*    选择排序
*    在一列数字中,选出最小数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
*/
function selectSort($arr){
	//定义中间变量
	$temp = 0;
	$mnt  = count($arr);
	for ($i=0; $i < $mnt-1; $i++) { 
		//定义最小位置
		$minIndex = $i;
		for ($j=$i+1; $j < $mnt; $j++) { 
			if($arr[$j] < $arr[$minIndex]){
				$minIndex = $j;
			}

		}
		if($i!=$minIndex){
			$temp 			= $arr[$i];
			$arr[$i] 		= $arr[$minIndex];
			$arr[$minIndex] = $temp;
		}
	}
	return $arr;
}
//测试
$arr = [5,2,1,1,3,1,4];
// $end = numSort($arr);
$end = selectSort($arr);
echo "<pre>";
print_r($end);

过程分析:

代码中的数组包含7个元素,所以需要6轮排序;备注:设定minIndex为最小元素的位置。
一、
1、[5, 2,1,1,3,1,4] 与j=1 位置的元素比较,得出最小值是2 minIndex=1
2、[5,2, 1,1,3,1,4] 与j=2 位置的元素比较,得出最小值是1 minIndex=2
3、[5,2,1, 1,3,1,4] 与j=3 位置的元素比较,最小值仍是1 minIndex=2
4、[5,2,1,1, 3,1,4] 与j=4 位置的元素比较,最小值仍是1 minIndex=2
5、[5,2,1,1,3, 1,4] 与j=5 位置的元素比较,最小值仍是1 minIndex=2
6、[5,2,1,1,3,1, 4] 与j=6 位置的元素比较,最小值仍是1 minIndex=2
得出:i=0,minIndex=2 交换位置[1,2, 5, 1,3,1,4]

二、
1、[1,2, 5,1,3,1,4] 与j=2 位置的元素比较,得出最小值是2 minIndex=1
2、[1,2,5, 1,3,1,4] 与j=3 位置的元素比较,得出最小值是1 minIndex=3
3、[1,2,5,1, 3,1,4] 与j=4 位置的元素比较,得出最小值仍是1 minIndex=3
4、[1,2,5,1,3, 1,4] 与j=5 位置的元素比较,得出最小值仍是1 minIndex=3
5、[1,2,5,1,3,1, 4] 与j=6 位置的元素比较,得出最小值仍是1 minIndex=3
得出:i=1,minIndex=3 交换位置[1, 1,5,2,3,1,4]
三、
1、[1,1,5, 2,3,1,4] 与j=3 位置的元素比较,得出最小值是2 minIndex=3
2、[1,1,5,2, 3,1,4] 与j=4 位置的元素比较,得出最小值仍是2 minIndex=3
3、[1,1,5,2,3, 1,4] 与j=5 位置的元素比较,得出最小值是1 minIndex=5
4、[1,1,5,2,3,1, 4] 与j=6 位置的元素比较,得出最小值仍是1 minIndex=5
得出:i=2,minIndex=5 交换位置[ 1, 1,1,2,3,5, 4]

四、
1、[1,1,1,2, 3,5,4] 与j=4 位置的元素比较,得出最小值是2 minIndex=3
2、[1,1,1,2,3, 5,4] 与j=5 位置的元素比较,得出最小值仍是2 minIndex=3
3、[1,1,1,2,3,5, 4] 与j=6 位置的元素比较,得出最小值仍是2 minIndex=3
得出:i=3,minIndex=3 相等,无需交换位置[1,1, 1,2,3,5,4]

五、
1、[1,1,1,2,3, 5,4] 与j=5 位置的元素比较,得出最小值仍是3 minIndex=4
2、[1,1,1,2,3,5, 4] 与j=6 位置的元素比较,得出最小值仍是3 minIndex=4
得出:i=4,minIndex=4 相等,无需交换位置[ 1, 1,1,2,3,5, 4]

六、
1、[1,1,1,2,3,5, 4] 与j=6 位置的元素比较,得出最小值仍是4 minIndex=6
得出:i=5,minIndex=6 交换位置[1,1,1,2,3,4,5]

结论:

每一轮比较都可以确定一个位置,对于N个数,比较N-1轮可以确定N个位置上的数,因为确定了N-1个位置,最后一个位置也就确定了

posted @ 2019-02-20 18:49  MeetU  阅读(810)  评论(0编辑  收藏  举报