50、PHP 实现选择排序

题目: PHP 实现选择排序

描述:

  • n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
  • (1)初始状态:无序区为R[1...n],有序区为空。
  • (2)第1趟排序
  • 在无序区R[1...n]中选出关键字最小的记录R[k],
  • 将它与无序区的第1个记录R[1]交换,
  • 使R[1...1]和R[2...n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
    * ......
  • (3)第i趟排序
  • 第i趟排序开始时,当前有序区和无序区分别为R[1...i-1]和Ri...n
  • 该趟排序从当前无序区中选出关键字最小的记录R[k],
  • 将它与无序区的第1个记录R[i]交换,
  • 使R[1...i]和R[i+1...n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
  • 这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
    */
php 复制代码
function selectSort(array $list)
{
	$length = count($list);
	for($i = 0; $i < $length; $i++){
		$key = $i;
		for($j = $i + 1; $j < $length; $j++){
			if($list[$j] < $list[$key]){
				$key = $j;
			}
		}
		$temp = $list[$key];
		$list[$key] = $list[$i];
		$list[$i] = $temp;
	}

	return $list;
}

$list = array(3, 6, 2, 4, 10, 1 ,9, 8, 5, 7);
var_dump(selectSort($list));

/**
 * 分析:
 * 原数组:[ 3 ,6 ,2 ,4 ,10 ,1 ,9 ,8 ,5 ,7 ]
 * key:5
 * [ 1 ,6 ,2 ,4 ,10 ,3 ,9 ,8 ,5 ,7 ]
 * key:2
 * [ 1 ,2 ,6 ,4 ,10 ,3 ,9 ,8 ,5 ,7 ]
 * key:5
 * [ 1 ,2 ,3 ,4 ,10 ,6 ,9 ,8 ,5 ,7 ]
 * key:3
 * [ 1 ,2 ,3 ,4 ,10 ,6 ,9 ,8 ,5 ,7 ]
 * key:8
 * [ 1 ,2 ,3 ,4 ,5 ,6 ,9 ,8 ,10 ,7 ]
 * key:5
 * [ 1 ,2 ,3 ,4 ,5 ,6 ,9 ,8 ,10 ,7 ]
 * key:9
 * [ 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,10 ,9 ]
 * key:7
 * [ 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,10 ,9 ]
 * key:9
 * [ 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ]
 * key:9
 * [ 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ]
 *  
 */
相关推荐
&岁月不待人&19 分钟前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
StayInLove22 分钟前
G1垃圾回收器日志详解
java·开发语言
无尽的大道30 分钟前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
爱吃生蚝的于勒33 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
binishuaio43 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE1 小时前
【Java SE】StringBuffer
java·开发语言
就是有点傻1 小时前
WPF中的依赖属性
开发语言·wpf
洋2401 小时前
C语言常用标准库函数
c语言·开发语言
进击的六角龙1 小时前
Python中处理Excel的基本概念(如工作簿、工作表等)
开发语言·python·excel
wrx繁星点点1 小时前
状态模式(State Pattern)详解
java·开发语言·ui·设计模式·状态模式