PHP排序算法大全(经典)

合集下载

php常见算法

php常见算法

php常见算法常见的php算法主要包括字符串处理、数组操作、排序算法和查找算法等。

下面将分别介绍这些算法的实现原理和应用场景。

一、字符串处理算法1. 字符串反转算法:将一个字符串倒序输出。

实现原理:使用循环遍历字符串,逐个将字符添加到一个新的字符串中,最后输出新字符串。

应用场景:密码加密、字符串匹配等。

2. 字符串查找算法:在一个字符串中查找指定的子串。

实现原理:使用循环遍历字符串,逐个比较子串和字符串中的字符,如果相等则返回匹配位置。

应用场景:文本搜索、关键字过滤等。

3. 字符串替换算法:将字符串中指定的字符或子串替换成新的字符或子串。

实现原理:使用str_replace函数或正则表达式实现替换操作。

应用场景:敏感词过滤、模板替换等。

二、数组操作算法1. 数组排序算法:对数组中的元素进行排序。

实现原理:使用内置的排序函数,如sort、asort、ksort等,或者使用冒泡排序、快速排序等自定义算法。

应用场景:对查询结果进行排序、数据分析等。

2. 数组去重算法:去除数组中重复的元素。

实现原理:使用array_unique函数或循环遍历数组,逐个比较元素并去重。

应用场景:数据去重、查找唯一元素等。

3. 数组合并算法:将多个数组合并成一个数组。

实现原理:使用array_merge函数或循环遍历数组,逐个将元素添加到新数组中。

应用场景:数据拼接、多个数组合并等。

三、排序算法1. 冒泡排序算法:对数组进行升序或降序排序。

实现原理:使用嵌套循环遍历数组,比较相邻元素并交换位置,直到完成排序。

应用场景:小规模数据的排序。

2. 快速排序算法:对数组进行升序或降序排序。

实现原理:选择一个基准元素,将小于基准的元素放在左边,大于基准的元素放在右边,递归地对左右两部分进行排序。

应用场景:大规模数据的排序。

3. 插入排序算法:对数组进行升序或降序排序。

实现原理:将数组分为已排序和未排序两部分,每次从未排序部分选择一个元素插入到已排序部分的正确位置。

php的9个经典排序算法

php的9个经典排序算法

以下是使用PHP 实现的9个经典的排序算法:1. 冒泡排序```function bubble_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}for ($i = 0; $i < $n; $i++) {for ($j = 0; $j < $n - $i - 1; $j++) {if ($arr[$j] > $arr[$j+1]) {$temp = $arr[$j+1];$arr[$j+1] = $arr[$j];$arr[$j] = $temp;}}}return $arr;}```2. 选择排序```function selection_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}for ($i = 0; $i < $n; $i++) {$minIndex = $i;for ($j = $i+1; $j < $n; $j++) {if ($arr[$j] < $arr[$minIndex]) {$minIndex = $j;}}$temp = $arr[$i];$arr[$i] = $arr[$minIndex];$arr[$minIndex] = $temp;}return $arr;}```3. 插入排序```function insertion_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}for ($i = 1; $i < $n; $i++) {$value = $arr[$i];$j = $i - 1;for (; $j >= 0; $j--) {if ($arr[$j] > $value) {$arr[$j+1] = $arr[$j];} else {break;}}$arr[$j+1] = $value;}return $arr;}```4. 快速排序```function quick_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}$pivotIndex = floor($n/2);$pivot = $arr[$pivotIndex];$left = array();$right = array();for ($i = 0; $i < $n; $i++) {if ($i == $pivotIndex) {continue;} else if ($arr[$i] < $pivot) {$left[] = $arr[$i];} else {$right[] = $arr[$i];}}return array_merge(quick_sort($left), array($pivot), quick_sort($right));}```5. 归并排序```function merge_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}$mid = floor($n/2);$left = array_slice($arr, 0, $mid);$right = array_slice($arr, $mid);$left = merge_sort($left);$right = merge_sort($right);$newArr = array();while (count($left) && count($right)) {$newArr[] = $left[0] < $right[0] ? array_shift($left) : array_shift($right);}return array_merge($newArr, $left, $right);}```6. 堆排序```function heap_sort(&$arr) {$n = count($arr);if ($n <= 1) {return;}build_heap($arr);for ($i = $n-1; $i > 0; $i--) {$temp = $arr[0];$arr[0] = $arr[$i];$arr[$i] = $temp;heapify($arr, 0, $i);}}function build_heap(&$arr) {$n = count($arr);for ($i = floor($n/2)-1; $i >= 0; $i--) {heapify($arr, $i, $n);}}function heapify(&$arr, $i, $n) {$left = 2*$i+1;$right = 2*$i+2;$largest = $i;if ($left < $n && $arr[$left] > $arr[$largest]) {$largest = $left;}if ($right < $n && $arr[$right] > $arr[$largest]) {$largest = $right;}if ($largest != $i) {$temp = $arr[$i];$arr[$i] = $arr[$largest];$arr[$largest] = $temp;heapify($arr, $largest, $n);}}```7. 希尔排序```function shell_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}$gap = floor($n/2);while ($gap > 0) {for ($i = $gap; $i < $n; $i++) {$temp = $arr[$i];for ($j = $i-$gap; $j >= 0 && $arr[$j] > $temp; $j -= $gap) {$arr[$j+$gap] = $arr[$j];}$arr[$j+$gap] = $temp;}$gap = floor($gap/2);}return $arr;}```8. 计数排序```function counting_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}$maxVal = max($arr);$countArr = array_fill(0, $maxVal+1, 0);for ($i = 0; $i < $n; $i++) {$countArr[$arr[$i]]++;}for ($i = 1; $i < $maxVal+1; $i++) {$countArr[$i] += $countArr[$i-1];}$tmpArr = array();for ($i = $n-1; $i >= 0; $i--) {$tmpArr[$countArr[$arr[$i]]-1] = $arr[$i];$countArr[$arr[$i]]--;}for ($i = 0; $i < $n; $i++) {$arr[$i] = $tmpArr[$i];}return $arr;}```9. 桶排序```function bucket_sort($arr) {$n = count($arr);if ($n <= 1) {return $arr;}$maxVal = max($arr);$bucketSize = 10;$bucketCount = floor($maxVal / $bucketSize) + 1;$buckets = array();for ($i = 0; $i < $bucketCount; $i++) {$buckets[$i] = array();}for ($i = 0; $i < $n; $i++) {$index = floor($arr[$i] / $bucketSize);array_push($buckets[$index], $arr[$i]);}$newArr = array();for ($i = 0; $i < $bucketCount; $i++) {$bucketArr = $buckets[$i];$len = count($bucketArr);if ($len > 1) {sort($bucketArr);}for ($j = 0; $j < $len; $j++) {array_push($newArr, $bucketArr[$j]);}}return $newArr;}```以上就是使用PHP 实现的9个经典的排序算法。

php二维数组排序方法

php二维数组排序方法

php二维数组排序方法篇一:php多维数组排序php多维数组排序usort―采用用户自定义的比较函数对数组中的值展开排序说明boolusort(array&$array,callback$cmp_function)本函数将用用户自定义的比较函数对一个数组中的值进行排序。

如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。

比较函数必须在第一个参数被指出大于,等同于或大于第二个参数时分别回到一个大于,等同于或大于零的整数。

注意:如果两个成员比较结果相同,则它们在排序后的数组中的顺序未经定义。

到php4.0.6之前,用户自定义函数将保留这些单元的原有顺序。

但是由于在4.1.0中引进了新的排序算法,结果将不是这样了,因为对此没有一个有效的解决方案。

特别注意:本函数为array中的单元剥夺代莱键名。

这将删掉旧有的键名而不仅就是再次排序。

如果成功则返回true,失败则返回false。

采用多维数组的usort()例子java代码1.<?php2.functioncmp($a,$b)3.{4.returnstrcmp($a["fruit"],$b["fruit"]);5.}6.7.$fruits[0]["fruit"]="lemons";8.$fruits[1]["fruit"]="apples";9.$fruits[2]["fruit"]="grapes";10.ort($fruits,"cmp");12.13.while(list($key,$value)=each($fruits)){14.echo"/$fruits[$key]:".$value["fruit"]."/n";15.}16.?>[java]viewplaincopyprint?1.<?php2.functioncmp($a,$b)3.{4.returnstrcmp($a["fruit"],$b["fruit"]);5.}6.7.$fruits[0]["fruit"]="lemons";8.$fruits[1]["fruit"]="apples";9.$fruits[2]["fruit"]="grapes";10.ort($fruits,"cmp");12.13.while(list($key,$value)=each($fruits)){14.echo"/$fruits[$key]:".$value["fruit"]."/n";15.}16.?>当排序多维数组时,$a和$b包含到数组第一个索引的引用。

PHP数组排序方法总结

PHP数组排序方法总结

PHP数组排序方法总结PHP 数组排序方法总结文章详细的介绍了快速创建数组的函数range()和常见PHP数组排序的方法,希望对大家有帮助。

随着PHP的快速发展,用它的人越来越多,在PHP数组学习摘录部分了解到最基本的PHP数组的建立和数组元素的显示。

需要深入学习下PHP数组的相关操作。

首先接触的就是PHP数组排序、降序的'排序问题。

sort:本函数为 array 中的单元赋予新的键名。

这将删除原有的键名而不仅是重新排序。

rsort:本函数对数组进行逆向排序(最高到最低)。

删除原有的键名而不仅是重新排序。

asort:对数组进行排序并保持索引关系arsort:对数组进行逆向排序并保持索引关系ksort:对数组按照键名排序,保留键名到数据的关联krsort:对数组按照键名逆向排序,保留键名到数据的关联natsort:对字母数字字符串进行排序并保持原有键/值的关联natcasesort:同natsort排序算法,但不区分大小写字母排序PHP 数组排序(sort)数字索引数组排序:函数:sort(array, [sort type])说明:sort()函数按升序对指定数组(第一个参数)进行排序。

sort函数第二参数作用为指定排序类型,是可选参数,可能的值为:SORT_REGULAR: 默认值,不改变类型进行排序;SORT_NUMERIC: 把值作为数字进行排序;SORT_STRING: 把值作为字符串进行排序;如数组中有4和”37″,按数字排序,4小于”37″;按字符串排序,4大于”37″;代码如下:<?php$a = array(4,"37",3,100,0,-5);sort($a);for ($i=0; $i<6; ++$i){echo $a[$i]." ";}echo "";sort($a,SORT_STRING);for ($i=0; $i<6; ++$i){echo $a[$i]." ";}echo "";>输出结果:-5 0 3 4 37 100-5 0 100 3 37 4降序排序:rsort(array, [sort type])参数用法与sort函数相同。

排序算法十大经典方法

排序算法十大经典方法

排序算法十大经典方法
排序算法是计算机科学中的经典问题之一,它们用于将一组元素按照一定规则排序。

以下是十大经典排序算法:
1. 冒泡排序:比较相邻元素并交换,每一轮将最大的元素移动到最后。

2. 选择排序:每一轮选出未排序部分中最小的元素,并将其放在已排序部分的末尾。

3. 插入排序:将未排序部分的第一个元素插入到已排序部分的合适位置。

4. 希尔排序:改进的插入排序,将数据分组排序,最终合并排序。

5. 归并排序:将序列拆分成子序列,分别排序后合并,递归完成。

6. 快速排序:选定一个基准值,将小于基准值的元素放在左边,大于基准值的元素放在右边,递归排序。

7. 堆排序:将序列构建成一个堆,然后一次将堆顶元素取出并调整堆。

8. 计数排序:统计每个元素出现的次数,再按照元素大小输出。

9. 桶排序:将数据分到一个或多个桶中,对每个桶进行排序,最后输出。

10. 基数排序:按照元素的位数从低到高进行排序,每次排序只考虑一位。

以上是十大经典排序算法,每个算法都有其优缺点和适用场景,选择合适的算法可以提高排序效率。

十大经典排序法

十大经典排序法

十大经典排序法
1. 冒泡排序(Bubble Sort):通过不断比较相邻元素并交换位置来排序,每一轮将最大的元素冒泡到最后。

2. 选择排序(Selection Sort):通过找到当前未排序部分的最小元素,将其放置到已排序部分的末尾,逐步构建有序序列。

3. 插入排序(Insertion Sort):将未排序元素逐个插入到已排序部分的正确位置,从而逐步构建有序序列。

4. 希尔排序(Shell Sort):是插入排序的改进版本,通过比较相隔一定间隔的元素进行排序,逐渐缩小间隔直至为1。

5. 归并排序(Merge Sort):采用分治策略,将待排序序列不断拆分为子序列,然后将子序列排序并合并得到最终有序序列。

6. 快速排序(Quick Sort):也是采用分治策略,通过选择一个基准元素将序列划分为左右两部分,分别对两部分进行排序。

7. 堆排序(Heap Sort):利用二叉堆的性质来进行排序,将待排序元素构建成最大(最小)堆,然后依次取出堆顶元素并调整堆结构。

8. 计数排序(Counting Sort):适用于元素值范围较小的情况,通过统计元素出现的次数,然后根据统计结果得到有序序列。

9. 桶排序(Bucket Sort):将元素根据大小分配到不同的桶中,每个桶内部再分别进行排序,最后将各个桶中的元素合并得到有序序列。

10. 基数排序(Radix Sort):将待排序元素按照位数进行排序,先按个位排序,再按十位排序,依此类推,直到最高位排序完成。

php 数组进行字典序排序的方法

php 数组进行字典序排序的方法

php 数组进行字典序排序的方法使用PHP数组进行字典序排序的方法在PHP中,数组是一种非常常见和重要的数据类型,它可以存储多个值,并且可以按照索引或者关联键进行访问。

在某些情况下,我们可能需要对数组进行排序,以便按照一定的顺序进行展示或者处理。

本文将介绍如何使用PHP数组进行字典序排序的方法。

我们需要了解字典序排序的概念。

字典序排序,也称为字母序排序,是一种按照字母顺序对元素进行排序的方法。

在字典序排序中,首先比较第一个字符的大小,如果相同,则比较第二个字符,以此类推,直到找到差异或者比较完所有字符。

在PHP中,我们可以使用sort()函数对数组进行排序。

sort()函数按照元素的值进行排序,默认是按照升序排列。

下面是一个示例:```php$fruits = array("apple", "banana", "cherry", "date");sort($fruits);foreach ($fruits as $fruit) {echo $fruit . " ";}```输出结果为:apple banana cherry date上述示例中,我们创建了一个包含水果名称的数组$fruits,并使用sort()函数对其进行排序。

最后使用foreach循环遍历数组并输出排序结果。

如果我们希望按照字典序降序排序,可以使用rsort()函数。

下面是一个示例:```php$fruits = array("apple", "banana", "cherry", "date");rsort($fruits);foreach ($fruits as $fruit) {echo $fruit . " ";}```输出结果为:date cherry banana apple在上述示例中,我们使用rsort()函数对数组进行降序排序,并使用foreach循环输出排序结果。

php数组排序以及按照某个字段排序

php数组排序以及按照某个字段排序

php数组排序以及按照某个字段排序经常,开发⼈员发现在PHP中使⽤这种数据结构对值或者数组元素进⾏排序⾮常有⽤。

PHP提供了⼀些适合多种数组的排序函数,这些函数允许你在数组内部对元素进⾏排列,也允许⽤很多不同的⽅法对它们进⾏重新排序。

在这篇⽂章中我们将讨论该排序中最重要的⼏个函数。

简单排序⾸先,让我们来看看最简单的情况:将⼀个数组元素从低到⾼进⾏简单排序,这个函数既可以按数字⼤⼩排列也可以按字母顺序排列。

PHP 的sort()函数实现了这个功能,如Listing A所⽰:Listing A<?php $data = array(5,8,1,7,2); sort($data); print_r($data); ?>输出结果如下所⽰:Array ([0] => 1[1] => 2[2] => 5[3] => 7[4] => 8)也能使⽤rsort()函数进⾏排序,它的结果与前⾯所使⽤的sort()简单排序结果相反。

Rsort()函数对数组元素进⾏从⾼到低的倒排,同样可以按数字⼤⼩排列也可以按字母顺序排列。

Listing B给我们展⽰了它的⼀个例⼦:Listing B<?php $data = array(5,8,1,7,2);rsort($data); print_r($data);?>它的输出结果如下:Array ([0] => 8[1] => 7[2] => 5[3] => 2[4] => 1)根据关键字排序当我们使⽤数组的时候,经常根据关键字对数组重新排序,从⾼到低。

Ksort()函数就是根据关键字进⾏排序的函数,同时,它在排序的过程中会保持关键字的相关性。

Listing C就是⼀个例⼦:Listing C<?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");ksort($data); print_r($data);?>它的输出结果如下:Array ([DE] => Germany[ES] => Spain[IN] => India[US] => United States)Krsort()函数是根据关键字对数组进⾏倒排,Listing D就是这样的例⼦:Listing D<?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");krsort($data); print_r($data);?>它的输出结果如下:Array ([US] => United States[IN] => India[ES] => Spain[DE] => Germany)根据值排序如果你想使⽤值排序来取代关键字排序的话,PHP也能满⾜你的要求。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

<?php
header ( 'Content-Type: text/html; charset=utf-8' );
class sort {
//冒泡排序
public function bubbleSort($res, $type = 'asc') {
if(!in_array($type, array('asc', 'desc'))) {return false;}
for($i = 0; $i < count($res); $i++) {
for($j = $i+1; $j < count($res); $j++) {
if(($res[$i] < $res[$j] && $type == 'desc') || ($res[$i] > $res[$j] && $type == 'asc')) {
list($res[$i], $res[$j]) = array($res[$j], $res[$i]);
}
}
}
return $res;
}
//快速排序
public function quickSort($res, $type = 'asc') {
if(($count = count($res)) <= 1 ) return $res;
$base = $res[0];
$left = $right = array();
for($i = 1; $i < $count; $i++) {
if(($res[$i] <= $base && $type == 'asc') || ($res[$i] > $base && $type == 'desc')) $left[] = $res[$i];
else $right[] = $res[$i];
}
$left = $this->quickSort($left, $type);
$right = $this->quickSort($right, $type);
return array_merge($left, array($base), $right);
}
//插入排序
public function insertSort($res, $type = 'asc') {
for($i = 1; $i < count($res); $i++) {
$k = $i;
while($k > 0) {
if(($res[$k-1] > $res[$k] && $type == 'asc') || ($res[$k-1] < $res[$k] && $type == 'desc'))
list($res[$k], $res[$k-1]) = array($res[$k-1], $res[$k]);
$k--;
}
}
return $res;
}
//选择排序
public function selectSort($res, $type = 'asc') {
for($i = 0; $i < count($res); $i++) {
$index = $i;
$tmp = $res[$i];
for($j = $i+1; $j < count($res); $j++) {
if(($tmp < $res[$j] && $type == 'desc') || ($tmp > $res[$j] && $type == 'asc')) {
$index = $j;
$tmp = $res[$j];
}
}
if($index != $i) list($res[$index], $res[$i]) = array($res[$i], $res[$index]);
}
return $res;
}
}
$res_arr = array(9, 3, 11, 23, 90, 99, 12, 34, 22, 87, 32, 12, 13);
$obj = new sort();
echo '一:数组排序';
echo '<br><br>';
echo '源数组:';
print_r($res_arr);
echo '<br>';
echo join(' , ', $res_arr);
echo '<br><br>';
echo '升序:<br>';
echo '冒泡->';
print_r(join(' , ', $obj->bubbleSort($res_arr)));
echo "<br>";
echo '快速->';
print_r(join(' , ', $obj->quickSort($res_arr)));
echo "<br>";
echo '插入->';
print_r(join(' , ', $obj->insertSort($res_arr)));
echo "<br>";
echo '选择->';
print_r(join(' , ', $obj->selectSort($res_arr)));
echo "<br><br>";
echo '降序:<br>';
echo '冒泡->';
print_r(join(' , ', $obj->bubblesort($res_arr, 'desc'))); echo "<br>";
echo '快速->';
print_r(join(' , ', $obj->quicksort($res_arr, 'desc'))); echo "<br>";
echo '插入->';
print_r(join(' , ', $obj->insertSort($res_arr, 'desc'))); echo "<br>";
echo '选择->';
print_r(join(' , ', $obj->selectSort($res_arr, 'desc'))); ?>。

相关文档
最新文档