冒泡排序、快速排序、插入排序学习

冒泡排序

<?php

// 冒泡排序,将数组内每个元素和所有元素对比,如果顺序错误就交换,最终排列好所有元素。

function bubble($array) {
	$len = count($array);
	for ($i=0; $i < $len; $i++) { 
		for ($j=$i+1; $j < $len; $j++) { 
			if ($array[$i] > $array[$j]) 
			{
				$temp = $array[$j];
				$array[$j] = $array[$i];
				$array[$i] = $temp;
			}
		}
	}
	return $array;
}

$array = [2,1,5,767,8,3,1,0];
print_r(bubble($array));

快速排序

<?php 

// 快速排序,使用第一个元素作为分隔符,比分隔符小的在左,大的在右,通过对左右数据递归运算,最终得到排列好的序列。

function quick($array)
{
	$len = count($array);
	if ($len <= 1) {
		return $array;
	}

	$middle = $array[0];
	$left = [];
	$right = [];
	for($i = 1; $i<$len; $i++)
	{
		if ($array[$i] < $middle) {
			array_push($left, $array[$i]);
		} else {
			array_push($right, $array[$i]);
		}
	}

	$left = quick($left);
	$right = quick($right);
	return array_merge($left, [$middle], $right);
}
$array = [2,1,5,767,8,3,1,0];
print_r(quick($array));

快速排序

<?php

// 插入排序。每插入一个元素都和前面已经完成排序的序列比较,序列中比要插入元素值大的元素则+1往前走,最终将插入元素放到序列中合适的位置。

function insertSort($array)
{
	$len = count($array);
	for($i = 1; $i < $len; $i++)
	{
		$insert_value = $array[$i]; // 要插入到序列元素
		
		// 计算插入位置,从序列的最后一个开始,逐一和要插入的值进行比较
		for($j = $i-1; $j>=0; $j--)
		{
			if ($array[$j] > $insert_value) {
				$array[$j+1] = $array[$j]; // 不符合的前进一位,给要插入的值留出位置
			} else {
				break;
			}
		}
		
		// 将要插入的元素放入为他空出来的位置
		// 这里为什么要+1呢,因为上一次循环的元素已经靠后一个位置了,所以他的位置是空的,+1就是他的位置。
		// 那又为什么这个赋值放在for之外呢,为什么不在else里赋值呢,因为第一次循环的时候$j的值为-1,不满足循环条件。
		$array[$j+1] = $insert_value;
	}

	return $array;
}

$array = [2,1,5,767,8,3,1,0];
print_r(insertSort($array));

发布了116 篇原创文章 · 获赞 12 · 访问量 99万+

猜你喜欢

转载自blog.csdn.net/u012628581/article/details/102860874