博客
关于我
php 常用常见算法 (冒泡,选择,插入 ...TBD)
阅读量:398 次
发布时间:2019-03-05

本文共 1469 字,大约阅读时间需要 4 分钟。

选择排序:

基本思想: 每一趟从待排序的数据元素中选择一个最值作为首元素

$arr = array(3, 1, 4, 7);function selection_sort($arr){	// 外层循环的轮数	for ($i = 0, $len = count($arr); $i < $len - 1; $i++)	{		for ($j = $i + 1; $j < $len; $j++)		{			// 伪代码: 交换两个位置的元素			swap($i, $j);		}	}	return $arr;}

选择排序改进:

$arr = array(3, 1, 4, 7);function advanced_selection_sort($arr){	for ($i = 0, $len = count($arr); $i < $len - 1; $i++)	{		$min = $i; // $min 中存放的将是最值(本例是最小值)下标		for ($j = $i + 1; $j < $len; $j++)		{			if ($arr[$j] < $arr[$min])			{				$min = $j;			}		}		// 进行交换,如果 $min 发生变化,则交换		if($min != $i)		{			// 伪代码实现			swap($arr[$min], $arr[$i]);		}	}	return $arr;}

冒泡排序:

基本思想: 对相邻的元素进行两两比较,根据需要交换,每一趟将一个最值"浮动"到顶端,最终完成排序。

$arr = array(3, 1, 4, 7);function bubble_sor($arr){	for ($i = 0, $len = count($arr); $i < $len - 1; $i++)	{		$flag = true; // 如果有一轮排序中,没有发生交换,则元素已经是正确的顺序,排序结束。		for ($j = 0; $j < $len -1 - i; $j++)		{			// 伪代码实现			swap($arr[$j], $arr[$j + 1]);			flag = false;		}		if (flag)		{			break;		}	} }

插入排序:

在这里插入图片描述
假定手上的牌是已经排好序的,将每次取到的牌插入合适的位置。只是在程序中,需要为每次待插入的牌挪出一个位置
动画演示:
在这里插入图片描述
图片来源:

#define LEN 5int a[LEN] = {1, 5, 4, 2, 3};void insertion_sort(void){	int i, j, key;	// 从 1 到 LEN 每次取一张牌	for(j = 1; j < LEN; j++)	{		printf("%d, %d, %d, %d, %d\n", a[0], a[1], a[2], a[3], a[4]);		key = a[j];		i = j - 1;		// 将已有的牌排好序		while(i >= 0 && a[i] > key)		{			a[i + 1] = a[i];			i--;		}		// 将取到牌插入		a[i + 1] = key;	}	printf("%d, %d, %d, %d, %d\n", a[0], a[1], a[2], a[3], a[4]);}int main(void){	insertion_sort();	return 0;}

转载地址:http://bjuzz.baihongyu.com/

你可能感兴趣的文章
mysql在centos下用命令批量导入报错_Variable ‘character_set_client‘ can‘t be set to the value of ‘---linux工作笔记042
查看>>
Mysql在Linux运行时新增配置文件提示:World-wrirable config file ‘/etc/mysql/conf.d/my.cnf‘ is ignored 权限过高导致
查看>>
Mysql在Windows上离线安装与配置
查看>>
MySQL在渗透测试中的应用
查看>>
Mysql在离线安装时启动失败:mysql服务无法启动,服务没有报告任何错误
查看>>
Mysql在离线安装时提示:error: Found option without preceding group in config file
查看>>
MySQL基于SSL的主从复制
查看>>
Mysql基本操作
查看>>
mysql基本操作
查看>>
mysql基础
查看>>
mysql基础---mysql查询机制
查看>>
MySQL基础5
查看>>
MySQL基础day07_mysql集群实例-MySQL 5.6
查看>>
Mysql基础命令 —— 数据库、数据表操作
查看>>
Mysql基础命令 —— 系统操作命令
查看>>
MySQL基础学习总结
查看>>
mysql基础教程三 —常见函数
查看>>
mysql基础教程二
查看>>
mysql基础教程四 --连接查询
查看>>
MySQL基础知识:创建MySQL数据库和表
查看>>