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 ]
 *  
 */
相关推荐
柯南二号11 分钟前
【Java后端】MyBatis-Plus 原理解析
java·开发语言·mybatis
dog25025 分钟前
难以超越的 TCP AIMD
网络协议·tcp/ip·php
我是哈哈hh31 分钟前
【Node.js】ECMAScript标准 以及 npm安装
开发语言·前端·javascript·node.js
檀越剑指大厂2 小时前
【Linux系列】如何在 Linux 服务器上快速获取公网
linux·服务器·php
Sammyyyyy2 小时前
2025年,Javascript后端应该用 Bun、Node.js 还是 Deno?
开发语言·javascript·node.js
William一直在路上3 小时前
Python数据类型转换详解:从基础到实践
开发语言·python
看到我,请让我去学习3 小时前
Qt— 布局综合项目(Splitter,Stacked,Dock)
开发语言·qt
GUET_一路向前3 小时前
【C语言防御性编程】if条件常量在前,变量在后
c语言·开发语言·if-else·防御性编程
曳渔3 小时前
UDP/TCP套接字编程简单实战指南
java·开发语言·网络·网络协议·tcp/ip·udp
三千道应用题4 小时前
WPF&C#超市管理系统(6)订单详情、顾客注册、商品销售排行查询和库存提示、LiveChat报表
开发语言·c#·wpf