博客
关于我
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/

你可能感兴趣的文章
NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
查看>>
NISP国家信息安全水平考试,收藏这一篇就够了
查看>>
NIS服务器的配置过程
查看>>
NIS认证管理域中的用户
查看>>
Nitrux 3.8 发布!性能全面提升,带来非凡体验
查看>>
NiuShop开源商城系统 SQL注入漏洞复现
查看>>
NI笔试——大数加法
查看>>
NLog 自定义字段 写入 oracle
查看>>
NLog类库使用探索——详解配置
查看>>
NLP 基于kashgari和BERT实现中文命名实体识别(NER)
查看>>
NLP 模型中的偏差和公平性检测
查看>>
Vue3.0 性能提升主要是通过哪几方面体现的?
查看>>
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP三大特征抽取器:CNN、RNN与Transformer全面解析
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP度量指标BELU真的完美么?
查看>>
NLP的不同研究领域和最新发展的概述
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>