博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法初级(冒泡,插入,快速,选择)
阅读量:6516 次
发布时间:2019-06-24

本文共 2985 字,大约阅读时间需要 9 分钟。

hot3.png

a[j+1]) a[j] <=> a[j+1] * 23 43 54 62 21 => 23 43 54 21 62 => 23 43 21 54 62 => 23 21 43 54 62 => 21 23 43 54 62 *在要排序的一组数中,对当前还未排好的序列, * 从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。 * 即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。 */function sort_base($array){ $i=0; $length = count($array); for(;$i<$length;$i++){ for($j=0;$j<$length-$i-1;$j++){ if($array[$j]>$array[$j+1]){ $temp = $array[$j+1]; $array[$j+1] = $array[$j]; $array[$j] = $temp; } } } return $array;}/* * p=0(28) 43 21 ... => 28 >21 $p = 2 $arr[2] <=> $arr[0] =>21 43 28 .... * p=1(43) 21 43 28 54 ...= > 43>28 $p=2 $arr[2] <=> $arr[1] => 21 28 43.... * .... * 在要排序的一组数中, * 选出最小的一个数与第一个位置的数交换。 * 然后在剩下的数当中再找最小的与第二个位置的数交换, * 如此循环到倒数第二个数和最后一个数比较为止。 */function select($arr) { $len=count($arr); for($i=0; $i<$len-1; $i++) { $p = $i; for($j=$i+1; $j<$len; $j++) { if($arr[$p] > $arr[$j]) { $p = $j; } } if($p != $i) { $tmp = $arr[$p]; $arr[$p] = $arr[$i]; $arr[$i] = $tmp; } } return $arr;}/* * tmp43 43>28 => 28 43 * tmp54 54>43 => 28 43 54 * tmp64 .... => 28 43 64 * tmp21 21<64 => 28 43 21 64 => 21 < 43 => 28 21 43 64 => 21 <28 => 21 28 43 64 * ...... * 思路分析:在要排序的一组数中, * 假设前面的数已经是排好顺序的, * 现在要把第n个数插到前面的有序数中, * 使得这n个数也是排好顺序的。如此反复循环, * 直到全部排好顺序。 */function insert($array){ $length = count($array); for($i=1;$i<$length;$i++){ $tmp = $array[$i]; //第I个元素,建立临时变量 echo ' tmp:'.$tmp; for($j=$i-1;$j>=0;$j--){ if($tmp<$array[$j]){ //如果临时变量小于当前值 $array[$j+1]=$array[$j]; //交换 =》 看做冒泡里的 交换 值是tmp换了位置 减少了 次数 $array[$j]=$tmp; echo "array:".$j."value:".$array[$j]; }else{ break; //因为这里假设的前几个数都已经排好序了 所以不用再比较 直接跳过 } } echo '
'; } return $array;}/* quick 二叉树 * 1:left 0 * right 43 54 62 21 66 32 36 76 39 * 2:left 21 32 36 39 => left 0 right 32 38 36 39(left 0 right 38 36 39 => return 36 38 39) * right 54 62 66 76 => left 0 right 62 66 76 => left 0 right 66 76 * 选择一个基准元素,通常选择第一个元素或者最后一个元素。 * 通过一趟扫描,将待排序列分成两部分, * 一部分比基准元素小,一部分大于等于基准元素。 * 此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。 */function quick($array){ //获取数组长度 看是否需要排序 $length= count($array); if($length<=1){ return $array; } //将数组第一个数字作为排序值 $basenum=$array[0]; $leftarray=array(); $rightarray= array(); for($i=1;$i<$length;$i++){ if($array[$i]<=$basenum){ $leftarray[]=$array[$i]; //小于放左边 }else{ $rightarray[]=$array[$i]; //大于放右边 } } /* * 递归调用 */ $leftarray=quick($leftarray); //var_dump($leftarray); $rightarray = quick($rightarray); //合并结果 return array_merge($leftarray,array($basenum),$rightarray);}

转载于:https://my.oschina.net/lwl1989/blog/495979

你可能感兴趣的文章
centos /linux 修改目录或文件权限
查看>>
leetcode--
查看>>
访问者模式
查看>>
jQuery清空标签内容--防止内存泄露
查看>>
关于 HandlerMethodArgumentResolver 类 以及 WebArgumentResolver 类 自定义解析参数
查看>>
比RBAC更好的权限认证方式(Auth类认证)
查看>>
httpd之编译安装详解
查看>>
服务器磁盘采购分析
查看>>
Java IO 之 InputStream源码
查看>>
PHP中is_callable()函数的用法详解
查看>>
Node.js股票模拟交易后台
查看>>
android动画
查看>>
新书试读_信息系统项目管理师考试考点分析与真题详解
查看>>
LVS Nginx HAProxy 优缺点
查看>>
images对象实现图片幻灯片
查看>>
Oracle 12c 日常维护
查看>>
CF 445A DZY Loves Chessboard
查看>>
Cobbler简介
查看>>
恢复 git reset -hard 的误操作
查看>>
C# WinForm 文件上传下载
查看>>