选择排序
方式:先让第一位与其他位比较大小找到最小的数字,然后是第二位与除第一位的其他位比较大小找出第二位,依此类推

$arr = [2,45,12,67,33,5,23,132,46];
for ($i=0; $i < count($arr); $i++) {
for ($j=$i+1; $j <count($arr) ; $j++) {
if($arr[$i] > $arr[$j]){
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
}
} print_r($arr);

冒泡排序
方法:比较相邻两个位置的数据并进行排序
优化:添加字段 if_replace 判断该轮排序是否完成,如果完成则不再继续后面的排序

$arr = [2,45,12,67,33,5,23,132,46];
$if_replace = false;
for ($i=0; $i < count($arr); $i++) {
for ($j=0; $j < count($arr)-1; $j++) {
if($arr[$j] > $arr[$j+1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
$if_replace = true;
}
}
if(!$if_replace){
break;
}
}
print_r($arr);

插入排序
方法:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入

$arr = [2,45,12,67,33,5,23,132,46];
for ($i=0; $i < count($arr)-1; $i++) {
for ($j=$i+1; $j > 0; $j--) {
if($arr[$j] < $arr[$j-1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}else{
break;
}
}
} print_r($arr);

希尔排序
方法:设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,
   所有距离为increment的元素放在同一个子序列中,在每一个子序列中分别实行直接插入排序。
   然后缩小间隔increment,重复上述子序列划分和排序工作。直到最后取increment=1,将所有元素放在同一个子序列中排序为止。

$arr = [2,45,12,67,33,5,23,132,46];
$increment = count($arr);
do{ $increment = floor($increment/3)+1; for ($i=0; $i < $increment; $i++) {
$k = 0;
$j = $i;
do{ for ($m=$j+$increment; $m > 0; $m-=$increment) {
if($arr[$m-$increment] > $arr[$m] && $arr[$m]){
$tmp = $arr[$m];
$arr[$m] = $arr[$m-$increment];
$arr[$m-$increment] = $tmp;
}else{
break;
}
} $k++;
$j = $i+($k*$increment);
}while($j<count($arr)); } }while($increment > 1);
print_r($arr);

快速排序

方法:先从数列中取出一个数作为基准数,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边,依此操作直到各区间只有一个数

$arr = [33, 24, 8, 21, 2, 23, 3, 32, 16];
function quickSort($arr)
{
$count = count($arr); if ($count < 2) {
return $arr;
} $leftArray = $rightArray = array();
$middle = $arr[0];// 基准值 for ($i = 1; $i < $count; $i++) {
// 小于基准值,存入左边;大于基准值,存入右边
if ($arr[$i] < $middle) {
$leftArray[] = $arr[$i];
} else {
$rightArray[] = $arr[$i];
}
} $leftArray = quickSort($leftArray);
$rightArray = quickSort($rightArray); return array_merge($leftArray, array($middle), $rightArray);
} print_r(quickSort($arr));

最新文章

  1. eclipse中手动导入DTD文件的方式
  2. Uva 699The Falling Leaves
  3. Windows Phone Foreground Toast
  4. HTML静态网页 css样式表
  5. background-size的cover和content的用法
  6. 自动脚本工具新版 v2.0
  7. Hadoop操作hdfs的命令【转载】
  8. xmlplus 组件设计系列之九 - 树(Tree)
  9. java基础---字符串string
  10. iOS_4_表情排列
  11. 微信小程序学习笔记(阶段二)
  12. [测试题]wows
  13. Vue-起步篇:Vue与React、 Angular的区别
  14. let 和 const 在for 循环中的使用
  15. 帆软报表(finereport)参数组合/下拉参数联动
  16. Linux shell 重定向学习笔记
  17. SpringBoot-性能优化之扫包优化
  18. tensorflow学习3---mnist
  19. Android新特性--ConstraintLayout完全解析
  20. Java常用的加密解密类(对称加密类)

热门文章

  1. 17flutter中的路由/命名路由/命名路由传值/无状态组件传值/有状态组件传值。
  2. jmeter 测试 websocket 接口
  3. 【用户体验度量】用户费力度评分(CES)
  4. DTCMS,添加文章时,内容中第一张图片作缩略图,并且等比例缩放图片
  5. linux下的进程通信之管道与FIFO
  6. Hystrix多个线程池切换执行超时带来的问题(图解)
  7. Npcap.资料
  8. easyui 解决连弹两个dialog时候,第二个dialog居中问题
  9. 基于SymmetricDS的多主一从数据库同步方案
  10. jQuery禁用input历史选择