博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php 常用常见算法 (冒泡,选择,插入 ...TBD)
阅读量:396 次
发布时间: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/

你可能感兴趣的文章