php实现八中排序算法
来源:互联网 发布:java split截取|| 编辑:程序博客网 时间:2024/05/01 18:44
Open Source: https://github.com/frowhy/Algorithm
Packagist: https://packagist.org/packages/frowhy/algorithm
涵盖了八大排序算法,欢迎优化补充。
- 快速排序
- 冒泡排序
- 直接选择排序
- 插值排序
- 希尔排序
- 归并排序
- 计算排序
- 堆排序
<?php/** * Created by PhpStorm. * User: frowhy * Date: 2017/4/4 * Time: 04:14 * *_______________%%%%%%%%%_______________________ *______________%%%%%%%%%%%%_____________________ *______________%%%%%%%%%%%%%____________________ *_____________%%__%%%%%%%%%%%___________________ *____________%%%__%%%%%%_%%%%%__________________ *____________%%%_%%%%%%%___%%%%_________________ *___________%%%__%%%%%%%%%%_%%%%________________ *__________%%%%__%%%%%%%%%%%_%%%%_______________ *________%%%%%___%%%%%%%%%%%__%%%%%_____________ *_______%%%%%%___%%%_%%%%%%%%___%%%%%___________ *_______%%%%%___%%%___%%%%%%%%___%%%%%%_________ *______%%%%%%___%%%__%%%%%%%%%%%___%%%%%%_______ *_____%%%%%%___%%%%_%%%%%%%%%%%%%%__%%%%%%______ *____%%%%%%%__%%%%%%%%%%%%%%%%%%%%%_%%%%%%%_____ *____%%%%%%%__%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%____ *___%%%%%%%__%%%%%%_%%%%%%%%%%%%%%%%%_%%%%%%%___ *___%%%%%%%__%%%%%%_%%%%%%_%%%%%%%%%___%%%%%%___ *___%%%%%%%____%%__%%%%%%___%%%%%%_____%%%%%%___ *___%%%%%%%________%%%%%%____%%%%%_____%%%%%____ *____%%%%%%________%%%%%_____%%%%%_____%%%%_____ *_____%%%%%________%%%%______%%%%%_____%%%______ *______%%%%%______;%%%________%%%______%________ *________%%_______%%%%________%%%%______________ */namespace Frowhy\Algorithm;class Algorithm{ public static function quickSort($arr) { if (! is_array($arr)) { return false; } $len = count($arr); if ($len <= 1) { return $arr; } $left = $right = []; for ($i = 1; $i < $len; $i++) { if ($arr[$i] < $arr[0]) { $left[] = $arr[$i]; } else { $right[] = $arr[$i]; } } $left = self::quickSort($left); $right = self::quickSort($right); return array_merge($left, [$arr[0]], $right); } static function array_swap($arr, $l, $r) { $arr[$l] = $arr[$l] ^ $arr[$r]; $arr[$r] = $arr[$l] ^ $arr[$r]; $arr[$l] = $arr[$l] ^ $arr[$r]; return $arr; } public static function bubbleSort($arr) { if (! is_array($arr)) { return false; } $len = count($arr); if ($len <= 1) { return $arr; } for ($i = 1; $i < $len; $i++) { $max_j = $len - $i; for ($j = 0; $j < $max_j; $j++) { if ($arr[$j] > $arr[$j + 1]) { $arr = self::array_swap($arr, $j, $j + 1); } } } return $arr; } public static function selectionSort($arr) { if (! is_array($arr)) { return false; } $len = count($arr); if ($len <= 1) { return $arr; } for ($i = 0; $i < $len; $i++) { $min_i = $arr[$i]; $index = $i; $min_j = $i + 1; for ($j = $min_j; $j < $len; $j++) { if ($arr[$j] < $min_i) { $min_i = $arr[$j]; $index = $j; } } if ($i < $index) { $arr = self::array_swap($arr, $i, $index); } } return $arr; } public static function insertionSort($arr) { if (! is_array($arr)) { return false; } $len = count($arr); if ($len <= 1) { return $arr; } for ($i = 0; $i < $len; $i++) { $pre_i = $i - 1; $current = $arr[$i]; while ($pre_i >= 0 && $arr[$pre_i] > $current) { $arr[$pre_i + 1] = $arr[$pre_i]; $pre_i -= 1; } $arr[$pre_i + 1] = $current; } return $arr; } public static function shellSort($arr) { if (! is_array($arr)) { return false; } $len = count($arr); if ($len <= 1) { return $arr; } $gap = 1; $pre_i = $len / 3; while ($gap < $pre_i) { $gap = $gap * 3 + 1; } while ($gap > 0) { for ($i = 0; $i < $len; $i++) { $temp = $arr[$i]; $j = $i - $gap; while ($j >= 0 and $arr[$j] > $temp) { $arr[$j + $gap] = $arr[$j]; $j -= $gap; } $arr[$j + $gap] = $temp; } $gap = floor($gap / 3); } return $arr; } public static function mergeSort(&$arr) { if (! is_array($arr)) { return false; } $len = count($arr); if ($len <= 1) { return $arr; } $mid = $len >> 1; $left = array_slice($arr, 0, $mid); $right = array_slice($arr, $mid); static::mergeSort($left); static::mergeSort($right); if (end($left) <= $right[0]) { $arr = array_merge($left, $right); } else { for ($i = 0, $j = 0, $k = 0; $k <= $len - 1; $k++) { if ($i >= $mid && $j < $len - $mid) { $arr[$k] = $right[$j++]; } elseif ($j >= $len - $mid && $i < $mid) { $arr[$k] = $left[$i++]; } elseif ($left[$i] <= $right[$j]) { $arr[$k] = $left[$i++]; } else { $arr[$k] = $right[$j++]; } } } return $arr; } public static function countingSort($arr) { if (! is_array($arr)) { return false; } $len = count($arr); if ($len <= 1) { return $arr; } $count = $sorted = []; $min = min($arr); $max = max($arr); for ($i = 0; $i < $len; $i++) { $count[$arr[$i]] = isset($count[$arr[$i]]) ? $count[$arr[$i]] + 1 : 1; } for ($j = $min; $j <= $max; $j++) { while (isset($count[$j]) && $count[$j] > 0) { $sorted[] = $j; $count[$j]--; } } return $sorted; } public static function heapSort($arr) { if (! is_array($arr)) { return false; } global $len; $len = count($arr); if ($len <= 1) { return $arr; } for ($i = $len; $i >= 0; $i--) { self::heapify($arr, $i); } return $arr; } static function heapify($arr, $i) { $left = 2 * $i + 1; $right = 2 * $i + 2; $largest = $i; global $len; if ($left < $len && $arr[$left] > $arr[$largest]) { $largest = $left; } if ($right < $len && $arr[$right] > $arr[$largest]) { $largest = $right; } if ($largest != $i) { self::array_swap($arr, $i, $largest); self::heapify($arr, $largest); } }}
<?php/** * Created by PhpStorm. * User: frowhy * Date: 2017/4/4 * Time: 04:22 * *_______________%%%%%%%%%_______________________ *______________%%%%%%%%%%%%_____________________ *______________%%%%%%%%%%%%%____________________ *_____________%%__%%%%%%%%%%%___________________ *____________%%%__%%%%%%_%%%%%__________________ *____________%%%_%%%%%%%___%%%%_________________ *___________%%%__%%%%%%%%%%_%%%%________________ *__________%%%%__%%%%%%%%%%%_%%%%_______________ *________%%%%%___%%%%%%%%%%%__%%%%%_____________ *_______%%%%%%___%%%_%%%%%%%%___%%%%%___________ *_______%%%%%___%%%___%%%%%%%%___%%%%%%_________ *______%%%%%%___%%%__%%%%%%%%%%%___%%%%%%_______ *_____%%%%%%___%%%%_%%%%%%%%%%%%%%__%%%%%%______ *____%%%%%%%__%%%%%%%%%%%%%%%%%%%%%_%%%%%%%_____ *____%%%%%%%__%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%____ *___%%%%%%%__%%%%%%_%%%%%%%%%%%%%%%%%_%%%%%%%___ *___%%%%%%%__%%%%%%_%%%%%%_%%%%%%%%%___%%%%%%___ *___%%%%%%%____%%__%%%%%%___%%%%%%_____%%%%%%___ *___%%%%%%%________%%%%%%____%%%%%_____%%%%%____ *____%%%%%%________%%%%%_____%%%%%_____%%%%_____ *_____%%%%%________%%%%______%%%%%_____%%%______ *______%%%%%______;%%%________%%%______%________ *________%%_______%%%%________%%%%______________ */use Frowhy\Algorithm\Algorithm;require_once __DIR__ . '/vendor/autoload.php';$total = 20;$arr = [];for ($i = 0; $i < $total; $i++) { $arr[] = rand(-10000, 10000);}$quickSort = Algorithm::quickSort($arr);$bubbleSort = Algorithm::bubbleSort($arr);$selectionSort = Algorithm::selectionSort($arr);$insertionSort = Algorithm::insertionSort($arr);$shellSort = Algorithm::shellSort($arr);$mergeSort = Algorithm::mergeSort($arr);$countingSort = Algorithm::countingSort($arr);$heapSort = Algorithm::heapSort($arr);print_r([ '原数组' => $arr, '快速排序' => $quickSort, '冒泡排序' => $bubbleSort, '选择排序' => $selectionSort, '插值排序' => $insertionSort, '希尔排序' => $shellSort, '归并排序' => $mergeSort, '计算排序' => $countingSort, '堆排序' => $heapSort, ]);
阅读全文
0 0
- php实现八中排序算法
- 利用Java语言实现八种排序算法(中
- php实现排序算法
- PHP中常见排序算法的实现,php
- 八种排序算法-Java实现
- php算法-php实现快速排序算法
- PHP实现常见排序算法
- PHP实现常见排序算法
- PHP实现常见排序算法
- PHP实现常见排序算法
- PHP实现常见排序算法
- PHP实现常见排序算法
- PHP实现各种排序算法
- PHP实现快速排序算法
- PHP实现插入排序算法
- PHP实现常见排序算法
- 全面实现PHP排序算法
- php实现常见排序算法
- 科普小知识:VR游戏的音效
- 优化访问图灵方法
- iOS 如何自动移除KVO观察者
- 线上抓娃娃属于“新型网络游戏”还是“涉嫌赌博”
- 在windows下切换python2和python3以及分别使用pip2和pip3进行库安装
- php实现八中排序算法
- 第二届(2017)中国IT武林大会暨2017年度中国IT年度人物颁奖盛典
- sqoop指定多个字段导入类型
- 了解Python
- Ubuntu安装MongoDB
- golang跨平台编译成arm平台文件
- 如何准备一场双11大促
- 基础知识
- Retrofit2网络框架的使用