时间空间复杂度 冒泡 选择 快速排序
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);
算法复杂度分为 时间复杂度和空间复杂度
时间复杂度是指执行算法所需要的计算工作量
空间复杂度是指执行这个算法所需要的内存空间
定义
算法中重复操作执行次数 是问题规模 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); }
相关文章推荐
- 排序算法之 选择排序 及其时间复杂度和空间复杂度
- 最坏时间复杂度为N^2排序(冒泡-选择-插入)
- 排序算法之 快速排序 及其时间复杂度和空间复杂度
- c语言排序算法总结 选择 插入 冒泡 希尔 快速 堆排序 稳定性 时间复杂度 空间复杂度
- 算法复杂度——时间复杂度和空间复杂度
- 关于快速排序和插入排序最坏时间复杂度为O(nlogn)的算法
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 时间复杂度和空间复杂度
- 计算时间和空间复杂度
- 数组的冒泡,选择,插入和快速排序
- 快速排序最坏情况下lgn的空间复杂度
- 时间复杂度和空间复杂度
- 常用的排序算法的时间复杂度和空间复杂度
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 时间复杂度和空间复杂度
- 常用的算法的时间复杂度和空间复杂度
- 排序算法复习(Java实现)(三): 插入,冒泡,选择,Shell,快速排序
- 不用额外空间的整数交换以及时间复杂度为O(n)空间复杂度为O(1)的排序算法
- 动态规划求数组中和最大字串的值 以及 字符串的循环移位(要求空间复杂度O(1),时间复杂度O(n))
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序