前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试最常遇到的4种常用排序算法(实例用php实现)

面试最常遇到的4种常用排序算法(实例用php实现)

作者头像
后端技术探索
发布2018-08-09 16:33:43
2680
发布2018-08-09 16:33:43
举报
文章被收录于专栏:后端技术探索
代码语言:javascript
复制




<?php
/*
* 升序排列
*/
class Sort
{
 /*
 * 冒泡排序, 稳定,时间复杂度O(n^2)
 */
 public static function bubbleSort($src_arr)
 {
 $n = count($src_arr);
 for($i=0;$i<$n-1;$i++)
 {
 for($j=0;$j<$n-$i-1;$j++)
 {
 if ($src_arr[$j] < $src_arr[$j+1])
 {
 $tmp = $src_arr[$j];
 $src_arr[$j] = $src_arr[$j+1];
 $src_arr[$j+1] = $tmp;
 }
 }
 }
 return $src_arr;
 }
 /*
 * 优化冒泡排序, 不稳定,最好时间O(n)
 * 如果没到最后一轮比较已经排好,则终止排序
 */
 public static function bubbleSortBetter($src_arr)
 {
 $n = count($src_arr);
 $flag = false;
 for($i=0;$i<$n-1;$i++)
 {
 for($j=0;$j<$n-$i-1;$j++)
 {
 if ($src_arr[$j] < $src_arr[$j+1])
 {
 $tmp = $src_arr[$j];
 $src_arr[$j] = $src_arr[$j+1];
 $src_arr[$j+1] = $tmp;
 $flag = true;
 }
 }
 if (!$flag) break;
 }
 return $src_arr;
 }
 /*
 * 选择排序, 不稳定,时间复杂度O(n^2)
 */
 public static function selectSort($src_arr)
 {
 for($i=0;$i<count($src_arr)-1;$i++)
 {
 for($j=$i+1;$j<count($src_arr);$j++)
 {
 if ($src_arr[$j] < $src_arr[$i])
 {
 $tmp = $src_arr[$j];
 $src_arr[$j] = $src_arr[$i];
 $src_arr[$i] = $tmp;
 }
 }
 }
 return $src_arr;
 }
 /*
 * 插入排序, 稳定,时间复杂度O(n^2)
 */
 public static function insertSort($src_arr)
 {
 for($i=1;$i<count($src_arr);$i++)
 {
 $insertVal = $src_arr[$i];
 $insertIndex = $i - 1;
 while($insertIndex >= 0 && $insertVal < $src_arr[$insertIndex])
 {
 $src_arr[$insertIndex + 1] = $src_arr[$insertIndex];
 $insertIndex--;
 }
 $src_ar[$insertIndex] = $insertVal;
 }
 return $src_arr;
 }
 /*
 * 快速排序, 不稳定,时间复杂度:O(nlongn) ~ O(n^2)
 */
 public static function quickSort($src_arr)
 {
 if (count($src_arr) < 1)
 {
 return $src_arr;
 }
 $key = $src_arr[0];
 $left_arr = array();
 $right_arr = array();
 for($i=1;$i<count($src_arr);$i++)
 {
 if ($src_arr[$i] <= $key)
 {
 $left_arr[] = $src_arr[$i];
 }
 else
 {
 $right_arr[] = $src_arr[$i];
 }
 $left_arr = self::quickSort($left_arr);
 $right_arr = self::quickSort($right_arr);
 return array_merge($left_arr, $right_arr);
 }
 }
}
$source = array('5', '9', '13', '20', '36', '38', '48', '51', '59', '63', '65', '71', '73', '75', '76', '85', '89', '93', '100', '106', '108', '108', '109', '109', '13', '25', '21', '33', '55', '6', '5', '9', '3', '20', '36', '8', '8', '1', '9', '13', '25', '21', '33', '55', '6', '5', '9', '3', '20', '36', '8', '8', '1', '9', '13', '25', '21', '33', '55', '6', '5', '9', '3', '20', '36', '8', '8', '1', '9', '13', '25', '21', '33', '55', '6', '5', '9', '3', '20', '36', '8', '8', '1', '9', '13', '25', '21', '33', '55', '6', '5', '9', '3', '20', '36', '8', '8', '1', '9', '13', '25', '21', '33', '55', '6');
$time1 = microtime();
$sort = Sort::bubbleSort($source);
$time2 =  microtime();
$timeuse = $time2 - $time1;
echo '冒泡共使用时间:'.$timeuse."\n";
$time1 = microtime();
$sort = Sort::bubbleSortBetter($source);
$time2 =  microtime();
$timeuse = $time2 - $time1;
echo '优化冒泡共使用时间:'.$timeuse."\n";
$time1 = microtime();
$sort = Sort::selectSort($source);
$time2 =  microtime();
$timeuse = $time2 - $time1;
echo '选择排序共使用时间:'.$timeuse."\n";
$time1 = microtime();
$sort = Sort::insertSort($source);
$time2 =  microtime();
$timeuse = $time2 - $time1;
echo '插入排序共使用时间:'.$timeuse."\n";
$time1 = microtime();
$sort = Sort::quickSort($source);
$time2 =  microtime();
$timeuse = $time2 - $time1;
echo '快速排序共使用时间:'.$timeuse."\n";
?>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2016-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 nginx 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档