常见排序算法(PHP实现)


function InsertSort($arr){
$num = count($arr);

for($i = 1; $i < $num; $i++){
$key = $arr[$i];
for($j = $i - 1; $j >= 0; $j--){
if($arr[$j] > $key){
$arr[$j + 1] = $arr[$j];
$arr[$j] = $key;
}
}
}
return $arr;
}

function BubbleSort($arr){
$num = count($arr);

for( $i = 1; $i < $num; $i++ ){
for($j = $num -1; $j >= $i; $j-- ){
if( $arr[$j] < $arr[$j - 1] ){
$tmp_val = $arr[$j - 1];
$arr[$j - 1] = $arr[$j];
$arr[$j] = $tmp_val;
}
}
}
return $arr;
}

function BucketSort($arr){
$bucket = array();

$idx = 0;

foreach ($arr as $value) {
if(!is_int($value)) continue;

$bucket[$value] = $value;

if($value > $idx) $idx = $value;
}

$rst = array();
for($i = 0; $i <= $idx; $i++){
if(isset($bucket[$i])){
$rst[] = $bucket[$i];
}
}

return $rst;
}

function ExchangeSort($arr){
$num = count($arr);

for($i = 0; $i < $num -1; $i++){
for($j = $i + 1; $j < $num; $j++){
if($arr[$i] > $arr[$j]){
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
}
}
return $arr;
}

function QuickSort($arr){
$num = count($arr);

$l_num = $r_num = 0;
$left = $right = array();

for($i = 1; $i < $num; $i++){
if($arr[$i] >= $arr[0]){
$right[] = $arr[$i];
$r_num++;
}else{
$left[] = $arr[$i];
$l_num++;
}
}

if($l_num > 1){
$left = QuickSort($left);
}

$left[] = $arr[0];

if($r_num > 1){
$right = QuickSort($right);
}

for($i = 0; $i < $r_num; $i++){
$left[] = $right[$i];
}

return $left;
}

function PigeonholeSort($arr){
$pigeonhole = array();

foreach ($arr as $value) {
if(!is_int($value)) continue;

if(isset($pigeonhole[$value]))
$pigeonhole[$value]++;
else
$pigeonhole[$value] = 0;
}

$rst = array();

$i = 0;
while($pigeonhole[$i]){
for($j = 0; $j < $pigeonhole[$i]; $j++){
$rst[] = $i;
}
$i++;
}

return $rst;
}

常见排序算法(PHP实现)

时间: 2024-10-10 18:17:03

常见排序算法(PHP实现)的相关文章

【整理】常见排序算法及其时间复杂度总结

原文出处: 1. 白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇 2. 面试常用算法总结--排序算法(java版) 3. 常见排序算法小结 本篇主要整理了冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序,堆排序七种常见算法,是从上面三篇博文中摘抄整理的,非原创. 一.冒泡排序 主要思路是: 通过交换相邻的两个数变成小数在前大数在后,这样每次遍历后,最大的数就"沉"到最后面了.重复N次即可以使数组有序. 冒泡排序改进1: 在某次遍历中,如果没有

常见排序算法(一) MergeSort

算法思想灰常重要,常见的用到分治思想的算法包括快速排序,归并,二分搜搜,大整数乘法等(参考 http://blog.csdn.net/com_stu_zhang/article/details/7233761,归纳很到位) 简单用归并对一个数组排序 思路: 简单来说对一个数组,只要他的左右两部分都是有序的,那么简单合并就ok了,那么左右两部分可以进一步划分各自的左右两部分----明显就是要递归了 算法:归并排序 1. 将数组一分为二,subArray1 和subArray2 2. 归并排序sub

常见排序算法(java实现)

常见排序算法介绍 冒泡排序 代码: public class BubbleSort { public static void sort(int[] array) { int tValue; for (int i = 0; i < array.length; i++) { for (int j = i; j < array.length; j++) { if (array[i] > array[j]) { tValue = array[i]; array[i] = array[j]; ar

常见排序算法(冒泡、选择、插入、快速、归并C++实现)

常见排序算法(冒泡.选择.插入.快速.归并C++实现) #include <iostream> using namespace std; // 冒泡排序 void bubbleSort (int data[], size_t size) { for (size_t i = 0; i < size - 1; ++i) { bool ordered = true; for (size_t j = 0; j < size - 1 - i; ++j) if (data[j+1] <

几种常见排序算法

几种常见排序算法 几种常见排序算法 写在前面 基础介绍 初级排序算法 selection sort选择排序 insertion sort插入排序 ShellSort希尔排序 shuffing不是排序算法 merge sort归并排序 Abstract in-place merge原地归并的抽象方法 Top-down mergesort自顶向下的归并排序 Bottom-up mergesort自底向上的归并排序 quicksort 三向切分的快速排序 Heapsort堆排序 总结和比较 命题 本文

第六章 常见排序算法

上章回顾 二叉树的定义 树深度的定义 什么样的二叉树是满二叉树 中序遍历的规则 [email protected]:Kevin-Dfg/[email protected]:Kevin-Dfg/Data-Structures-and-Algorithm-Analysis-in-C.git 第六章 第六章 常见排序算法 常见排序算法 [email protected]:Kevin-Dfg/[email protected]:Kevin-Dfg/Data-Structures-and-Algorith

常见排序算法总结(java实现)

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.常见的排序算法有选择排序,插入排序,希尔排序,归并排序和快速排序 由于在排序的过程中不可避免的要涉及到比较和交换,所以将他们抽取为两个单独的函数,如下所示 //为了排序代码的通用性,这里假定待排序的元素实现了Comparable接口 private static boolean less(Comparable v ,Comparable w){ return v.compareTo(w)<0; } priva

十种常见排序算法

1.常见算法分类 十种常见排序算法一般分为以下几种: (1)非线性时间比较类排序:交换类排序(快速排序和冒泡排序).插入类排序(简单插入排序和希尔排序).选择类排序(简单选择排序和堆排序).归并排序(二路归并排序和多路归并排序): (2)线性时间非比较类排序:计数排序.基数排序和桶排序. 总结: (1)在比较类排序中,归并排序号称最快,其次是快速排序和堆排序,两者不相伯仲,但是有一点需要注意,数据初始排序状态对堆排序不会产生太大的影响,而快速排序却恰恰相反. (2)线性时间非比较类排序一般要优于

常见排序算法(JS版)

常见排序算法(JS版)包括: 内置排序,冒泡排序,选择排序,插入排序,希尔排序,快速排序(递归 & 堆栈),归并排序,堆排序,以及分析每种排序算法的执行时间. index.html 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title>twobin 常见排序算法 (JS版) </title> 5 <meta http-equiv="content-type" content=&