基础算法

<?php 
/**
* 基础算法
*/
class Algorithm
{
	/**
	 * 冒泡排序
	 * 基本思想:对需要排序的数组从后往前(逆序)进行多遍的扫描,当发现相邻的两个数值的次序与排序要求的规则不一致时,就将这两个数值进行交换。这样比较小(大)的数值就将逐渐从后面向前面移动。
	 * 2018-02-08 14:32:53
	 */
	public function bubble_sort($array,$r) {
		if (isset($array) || empty($array)) {
			$str = rand(1111111111,9999999999);
			$len = strlen($str);
			$data = array();
			for ($i=0; $i < $len; $i++) { 
				$data[] = substr($str,$i,1);
			}
		}
		
		
		$count = count($data);
		for ($m=0; $m < $count; $m++) {
			for ($n=$m+1; $n < $count; $n++) {
				switch ($r) {
				 	case '+'://正序
				 		if ($data[$m] > $data[$n]) {
							$c = $data[$m];
							$data[$m] = $data[$n];
							$data[$n] = $c;
						}
				 		break;
				 	case '-'://倒序
				 		if ($data[$m] < $data[$n]) {
							$c = $data[$m];
							$data[$m] = $data[$n];
							$data[$n] = $c;
						}
						break;  
				} 
				
			} 
		}
		return $data;
	}

	/**
	 * 字符串倒序
	 * 2018-02-11 09:38:22
	 */
	public function string_inverted($string) {
		$str = 'abcdefgh';
		$str = isset($string) ? $string : $str;
		echo strlen($str);
		$str = strrev($str);
		$arr = str_split($str,3);
		print_r($arr);
	}

	/**
	 * 快速排序
	 * 基本思想:在数组中挑出一个元素(多为第一个)作为标尺,扫描一遍数组将比标尺小的元素排在标尺之前,将所有比标尺大的元素排在标尺之后,通过递归将各子序列分别划分为更小的序列直到所有的序列顺序一致。
	 */
	public function quick_sort($array) {
		//先判断是否需要继续进行
		$len = count($array);
		if ($len <= 1) {
			return $array;
		}
		$base = $array[0];//选择一个标尺 选择第一个元素
		//初始化两个数组
		$left_array = array();//小于标尺的
		$right_array = array();//大于标尺的
		for ($i=1; $i < $len ; $i++) { 
			//遍历 除了标尺外的所有元素,按照大小关系放入两个数组内
			if ($base < $array[$i]) {
				//放入左边数组
				$left_array[] = $array[$i];
			} else {
				//放入右边
				$right_array[] = $array[$i];
			}
		}
		//再分别对 左边 和 右边的数组进行相同的排序处理方式
      	//递归调用这个函数,并记录结果
		$left_array = quick_sort($left_array);
		$right_array = quick_sort($right_array);
		//合并左边 标尺 右边
		$new_array = array_merge($left_array,array($base),$right_array);
		return $new_array;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值