常见算法(一)

  • 算法中术语说明
  1. 稳定性:如果排序前A在B的前面,经过排序后,A依然在B的前面,就说这个算法是稳定的,反之则是不稳定的。
  2. 原地排序:指的是空间复杂度O(1)的算法,排序中不需要额外的内存空间。
  3. 时间复杂度: 一个算法执行所耗费的时间。
  4. 空间复杂度:运行完一个程序所需额外内存(除了待排序数据之外占用的内存)的大小。

我们今天主要讲解冒泡排序、插入排序,选择排序,这三个排序的时间复杂度都是O(n^2),空间复杂度O(1),都是原地排序。另外提一句虽然他们的时间复杂度虽然都是O(n^2),但是插入排序更受欢迎,大家知道是为什么吗?

下面先上代码

冒泡排序

function bubbleSort($array)
{
	$count = count($array);

	if($count <= 1) return $array;

	for ($i = 0; $i < $count; $i ++) {
		for ($j = 0; $j < $count-$i-1; $j++) {
			if ($array[$j] > $array[$j+1]) {
				$tmp = $array[$j];
				$array[$j] = $array[$j+1];
				$array[$j+1] = $tmp;
			}
		}
	}

	return $array;
}

选择排序

function selectionSort($array)
{
	$count = count($array);

	if ($count <= 1) return $array;

	for ($i = 0; $i < $count; $i++) {
		$min = $i;
		for ($j = $i; $j < $count; $j++) {
			if ($array[$j] < $array[$min]) {
				$min = $j;
			}
		}
		$tmp = $array[$min];
		$array[$min] = $array[$i];
		$array[$i] = $tmp;
	}

	return $array;
}

插入排序

function insertionSort($array)
{
	$count = count($array);

	if ($count <= 1) return $array;

	for ($i = 1; $i < $count; $i++) {
		$tmp = $array[$i];
		$j = $i - 1;
		for (; $j >=0; $j--) {
			if ($array[$j] > $tmp) {
				$array[$j+1] = $array[$j];
			} else {
				break;
			}
		}
		$array[$j+1] = $tmp;
	}

	return $array;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值