PHP实现冒泡、选择、插入和快速排序
来源:互联网 发布:网络博客大全评级 编辑:程序博客网 时间:2024/06/06 03:13
<?php//冒泡排序、选择排序、插入排序、快速排序//定义要排序的数组for( $i = 0; $i < 1000; $i++ ) { $arr[] = rand(1, 100);}//冒泡排序//原理:每次从数组中比较出两个数中较大的值再继续往下比较,//直到最后一个数最大,重复操作循环使最大的数一个个冒泡出来function bubble_sort($arr) { //计算数组的长度 $len = count($arr); //循环($len-1)次 for ( $i = 1; $i < $len; $i++ ) { //循环($len-$i)次 for ( $j = 0; $j < $len - $i; ) { //第一个值大于第一个值则交换位置 if ( $arr[$j] > $arr[$j+1] ) { $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } } return $arr;}//选择排序//原理:假设第一个元素最小,将第一个元素之后的元素逐一与它比较,//取出它们中最小的取代第一个元素,//然后从第一个元素开始,继续往下比较function select_sort($arr) { //计算数组的长度 $len = count($arr); //循环($len-1)次 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 ) { $temp = $arr[$i]; $arr[$i] = $arr[$p]; $arr[$p] = $temp; } } return $arr;}//插入排序//原理:从第二个元素开始,左边的元素已经排好序,//只需要往左边插入到合适的位置(一开始左边只有第一个元素,//第二个元素与第一个元素比较后排序,然后从第三个元素开始,//分别比较第一、第二个元素...)function insert_sort($arr) { //计算数组的长度 $len = count($arr); //循环($len-1)次 for ( $i = 1; $i < $len; $i++ ) { //用于插入的元素 $temp = $arr[$i]; //与左边的元素逐一比较,插入合适的位置使左边排序成功 for( $j = $i-1; $j >= 0; $j++ ) { if ( $temp > $arr[$j] ) { $arr[$j+1] = $arr[$j]; $arr[$j] = $temp; } else { break; } } } return $arr;}//快速排序//原理:每次将数组分成大小两部分,利用递归处理function quick_sort($arr) { //计算数组长度 $len = count($arr); //数组长度小于2直接返回 if ( $len <= 1 ) { return $arr; } //设置中间的基数,以$arr[0]为分界江数组分为大小两部分 $base_num = $arr[0]; //循环($len-1)次 for ( $i = 1; $i < $len; $i++ ) { //小于基数的在左边,大于基数的在右边 if ( $arr[$i] < $base_num ) { $left_array[] = $arr[i]; } else { $right_array[] = $arr[i]; } } //将基数追加到两组数组中间 $left_array[] = $base_num; //继续递归划分数组 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); return array_merge($left_array, $right_array);}//测试不同排序算法之间的差异//速度:插入排序>选择排序>冒泡排序//快速排序有波动,当数组越大时快排优势越大,//并且逐渐一直快于其它排序$t1 = microtime(true);bubble_sort($arr);$t2 = microtime(true);echo 'bubble_sort() consume time: ';echo ($t2 - $t1)/1000 . 'ms';echo '<br />';$t1 = microtime(true);select_sort($arr);$t2 = microtime(true);echo 'select_sort() consume time: ';echo ($t2 - $t1)/1000 . 'ms';echo '<br />';$t1 = microtime(true);insert_sort($arr);$t2 = microtime(true);echo 'insert_sort() consume time: ';echo ($t2 - $t1)/1000 . 'ms';echo '<br />';$t1 = microtime(true);quick_sort($arr);$t2 = microtime(true);echo 'quick_sort() consume time: ';echo ($t2 - $t1)/1000 . 'ms';echo '<br />';$t1 = microtime(true);sort($arr);$t2 = microtime(true);echo 'sort() consume time: ';echo ($t2 - $t1)/1000 . 'ms';echo '<br />';// print_r($arr);?>
0 0
- PHP实现冒泡、选择、插入和快速排序
- php 实现冒泡、选择、插入和快速排序详解
- PHP实现插入排序,选择排序,冒泡排序和快速排序
- php实现冒泡排序,选择排序,插入排序和快速排序
- PHP 实现插入、选择、冒泡、快速排序算法
- PHP实现插入、选择、冒泡、快速排序算法
- PHP实现插入、选择、冒泡、快速排序算法
- PHP实现插入、选择、冒泡、快速排序算法
- PHP实现插入、选择、冒泡、快速排序算法(转贴)
- PHP实现插入、选择、冒泡、快速排序算法
- PHP 冒泡,选择,插入和快速排序法
- php 冒泡、选择、插入、快速排序算法
- PHP(冒泡,快速,选择,插入)排序
- c#实现冒泡、快速、选择和插入排序算法
- c++实现冒泡,选择,插入,快速排序
- 【Javascript】实现快速,选择,冒泡,插入排序
- java实现冒泡,选择,插入,快速排序
- 冒泡排序,选择排序,插入排序,快速排序(PHP)
- VIM配置显示行号
- [BZOJ2286] [Sdoi2011]消耗战
- disksim raid 部分源代码解析
- 相对误差的传递
- TCP/IP基础(二)
- PHP实现冒泡、选择、插入和快速排序
- gravity 与layout_gravity的区别
- POJ 2778 DNA Sequence 题解&代码
- JAVA的包装类 http://blog.csdn.net/hjf19790118/article/details/7081925
- 节点动作
- zzulioj 1730: 通信基站 (全排列&DFS)好题
- 安卓开发中SQLite的使用
- PB中TreeView控件使用技巧
- 【ASP.NET】六大内置对象