您的位置:首页 > 其它

时间空间复杂度 冒泡 选择 快速排序

2017-07-10 11:59 225 查看
复杂度

算法复杂度分为 时间复杂度和空间复杂度

时间复杂度是指执行算法所需要的计算工作量

空间复杂度是指执行这个算法所需要的内存空间

定义

算法中重复操作执行次数 是问题规模 n 的某个函数 , 用 T(n) 表示 , 有某个辅助函数 f(n)

使得当 n 趋近于无穷大时 T(n)/f(n)的 极限值 为不等于 0 的常数

则称 f(n) 是 T(n) 同数量级函数 记做 T(n) = O(f(n)) 为时间复杂度

算法

$arr = array(3,4,21,321,33,56,6,7,8,3,1);

/**
* 冒泡排序
* 当前元素与后一位元素做比较如果当前元素 大于(小于)后位元素则做交换
* 1.外层循环控制循环次数
* 2.内容循环使两两比较
* 3.$len-$i -1 因 $i 为已经循环了的,所以没必要重复循环;因最后一位后没有可比较
* 的数 所以要长度 -1
* @return $arr
*/
function maoPao($arr){
$len = count($arr);
if($len < 2){
return $arr;
}
for($i=0;$i<$len;$i++){
for($j=0;$j<$len-$i-1;$j++){
if($arr[$j] < $arr[$j+1]){
$tmp = $arr[$j+1];
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}

echo '<\pre>';
print_r(maoPao($arr));
exit;

/**
* 选择排序
* 外层循环 控制循环次数 每次循环将当前元素作为 最小/最大 与其后面所有数比较
*/
function selectSort($arr){
$len = count($arr);
if($len < 2){
return $arr;
}
for($i=0;$i<$len;$i++){
$m = $i;
for($j=$i+1;$j<$len;$j++){
if($arr[$m] < $arr[$j]){
$m = $j;
}
}
if($m != $i){
$tmp = $arr[$i];
$arr[$i] = $arr[$m];
$arr[$m] = $tmp;
}
}
return $arr;
}

echo '<pre>';
print_r(selectSort($arr));
exit;

/**
* 快速排序
* 基于二分思想的排序算法
*/
function quickSort($array){
$len = count($array);
if(!$len){
return $array;
}
$key = $array[0];
$leftArr = array();
$rightArr = array();
for($i=1;$i<$len;$i++){
if($array[$i] >= $key){
$rightArr[] = $array[$i];
}else{
$leftArr[] = $array[$i];
}
}
$leftArr = quickSort($leftArr);
$rightArr = quickSort($rightArr);

return array_merge($leftArr, array($key), $rightArr);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法