PHP数组几种常见的排序方式
2017-02-13 21:27
465 查看
PHP数组几种常见的排序方式
1.冒泡排序
2.选择排序
3.插入排序
4.快速排序
1.冒泡排序
2.选择排序
3.插入排序
4.快速排序
$arr = array(28,6,19,5,43,21,10,66);//排序数组 /** * 冒泡排序 * 思路分析:在需要排序的一组数中, * 对当前未排序的数从前往后即相邻的数两两比较, * 让较大的数往下沉 较小的数往上冒 * 即 当相邻的两个数进行比较后发现它们排序与要求相反就调整其两个的位置 */ //1.冒泡排序 function bubble_sort($arr){ $tmp = $arr[0]; //记录最大数初始为第一个 $len = count($arr); //外围循环 - 要比较周期次数(数组长度-1) for ($i=1; $i < $len; $i++) { //周期内两两比较次数(数组长度-1) for ($j=1; $j < $len; $j++) { if ($tmp > $arr[$j]) { //前面大于后面数时交换位置 $tmp = $arr[$j-1]; $arr[$j-1] = $arr[$j]; $arr[$j] = $tmp; }else{ //顺序保持不变 修改最大数 $tmp = $arr[$j]; } } } return $arr; } //2.冒泡排序 function bubble_sort2($arr){ $len = count($arr); //周期循环次数 for ($i=1; $i < $len; $i++) { //两两比较次数 for ($j=0; $j < $len-$i; $j++) { //前数大于后数 需要调整位置 if ($arr[$j] > $arr[$j+1]) { $tmp = $arr[$j+1]; $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; } } } return $arr; } /** * 选择排序 * 在需要排序的一组数中选出最小的一个数与第一个数交换 * 接下来在找出最小的一个数与第二个数进行交换 * 如此返回直到倒数第二个和最后一个数进行比较 */ function select_sort($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; } } //循环一个周期后把最小值调换到$i的位置 if ($p != $i) { $tmp = $arr[$i]; $arr[$i] = $arr[$p]; $arr[$p] = $tmp; } } return $arr; } /** * 插入排序 * 在排序的一组数中假设前边的数是已经排好序的 * 现在要把N插入到前边有序数中去 * 使得这个N也是排好序的 * 如此反复直到排序完成 */ function insert_sort($arr){ $len = count($arr); //外层循环 for ($i=1; $i < $len; $i++) { $tmp = $arr[$i];//插入值 //内层循环 for ($j=$i-1; $j >= 0; $j--) { if ($tmp < $arr[$j]) { //调换位置 $arr[$j+1] = $arr[$j]; $arr[$j] = $tmp; }else{ break; } } } return $arr; } /** * 快速排序 * 选择一个基准元素 通常为第一个或最后一个 * 经过一次扫描将为排序的数分为两部分 * 一部分比基准数小 另一部分比基准数大 * 这时基准数就在排序后的正确位置 * 递归两面所有的数 最后得到排序数据 */ function quick_sort($arr){ $len = count($arr); if ($len <= 1) { return $arr; } $base_num = $arr[0]; //先定义一个基准数 //初始化两个基准两侧数组 $left_array = array(); $right_array = array(); //遍历数组 大于基准的放在右边 否则放左边 for ($i=1; $i < $len; $i++) { if ($arr[$i] > $base_num) { $left_array[] = $arr[$i]; }else{ $right_array[] = $arr[$i]; } } //同样的方式处理左右两侧数组 递归调用 $left_array = quick_sort($left_array); $right_array = quick_sort($right_array); //合并数组 并返回 return array_merge($left_array,array($base_num),$right_array); }
相关文章推荐
- 数组的几种常见排序方式总结(Java程序)
- PHP中2种方法快速地合并数组,你知道吗?合并两个数组有几种方式,试比较它们的异同
- php网站常见的几种攻击方式(转)
- Objective-C中遍历字典、数组和集合的几种常见方式
- JS数组的几种排序方式
- java中常见的几种排序方式
- java 数组常见的几种排序
- php常见的几种排序以及二分法查找
- php 二位数组排序方式
- PHP 两个多维数组根据某个键的值进行组合排序的几种思路(二)
- php中的数组遍历的几种方式
- php常见的几种排序以及二分法查找
- 几种常见的数组排序方法
- PHP常见的几种攻击方式
- 数组常见常用的几种排序→→→冒泡→→选择→→插入
- 数组几种常见排序的javascript实现
- PHP 对数组进行压缩编码, 哪种最好?(php几种压缩方式的对比)
- 黑马程序员--学习笔记-- Java中常见的数组排序方式(一)
- 数组排序几种实现方式
- python numpy数组的几种排序方式