博客
关于我
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 DBA 进阶知识详解
查看>>
Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
查看>>
Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
查看>>
mysql deadlock found when trying to get lock暴力解决
查看>>
MuseTalk如何生成高质量视频(使用技巧)
查看>>
mutiplemap 总结
查看>>
MySQL DELETE 表别名问题
查看>>
MySQL Error Handling in Stored Procedures---转载
查看>>
MVC 区域功能
查看>>
MySQL FEDERATED 提示
查看>>
mysql generic安装_MySQL 5.6 Generic Binary安装与配置_MySQL
查看>>
Mysql group by
查看>>
MySQL I 有福啦,窗口函数大大提高了取数的效率!
查看>>
mysql id自动增长 初始值 Mysql重置auto_increment初始值
查看>>
MySQL in 太多过慢的 3 种解决方案
查看>>
MySQL InnoDB 三大文件日志,看完秒懂
查看>>
Mysql InnoDB 数据更新导致锁表
查看>>
Mysql Innodb 锁机制
查看>>
MySQL InnoDB中意向锁的作用及原理探
查看>>
MySQL InnoDB事务隔离级别与锁机制深入解析
查看>>