导航:首页 > 源码编译 > 排名算法php

排名算法php

发布时间:2022-09-07 05:25:15

A. php冒泡排序法~呢

$arr=array(1,43,54,62,21,66,32,78,36,76,39);
functiongetpao($arr)
{
$len=count($arr);//设置一个空数组用来接收冒出来的泡//该层循环控制需要冒泡的轮数
for($i=1;$i<$len;$i++)
{//该层循环用来控制每轮冒出一个数需要比较的次数
for($k=0;$k<$len-$i;$k++)
{if($arr[$k]>$arr[$k+1])
{
$tmp=$arr[$k+1];
$arr[$k+1]=$arr[$k];
$arr[$k]=$tmp;
}
}
}return$arr;
}

网页链接

B. 关于PHP冒泡排序法。

前台输入部分我就不写了,管你是用字符串形式一起传到后台还是说先用js存储了再提交到后台,总之假设你前天都获得了一个一维数组,这里给一个从大到小,一个从小到大的写法:

从大到小:

<?php

/**

* 冒泡排序算法示例

*/

// 这里以一维数组做演示

$demo_array = array(23,15,43,25,54,2,6,82,11,5,21,32,65);

// 第一层for循环可以理解为从数组中键为0开始循环到最后一个

for ($i=0;$i<count($demo_array);$i++) {

// 第二层将从键为$i的地方循环到数组最后

for ($j=$i+1;$j<count($demo_array);$j++) {

// 比较数组中相邻两个值的大小

if ($demo_array[$i] < $demo_array[$j]) {

$tmp = $demo_array[$i]; // 这里的tmp是临时变量

$demo_array[$i] = $demo_array[$j]; // 第一次更换位置

$demo_array[$j] = $tmp; // 完成位置互换

}

}

}

// 打印结果集

echo '<pre>';

var_mp($demo_array);

echo '</pre>';

主要的代码已经给你写出来了,你自己把前端部分加上就行了

C. php如何按数组键值排序

$arr=[
array(
'name'=>'小坏龙',
'age'=>28
),
array(
'name'=>'小坏龙2',
'age'=>14
),
array(
'name'=>'小坏龙3',
'age'=>59
),
array(
'name'=>'小坏龙4',
'age'=>23
),
array(
'name'=>'小坏龙5',
'age'=>23
),
array(
'name'=>'小坏龙6',
'age'=>21
),
];

array_multisort(array_column($arr,'age'),SORT_DESC,$arr);
print_r($arr);

其中 array_column(数组,数组中的某个键值) 从多维数组中取出某个键值的一列 返回一个一维数组;
array_multisort(数组(一维数组),排序方式(SOTR_ASC,SOTR_DESC),其他数组(可以是二维的)

D. php数字排序问题

<?php
$file = 'text.txt';
$content = file_get_contents($file);
$array = explode("\r\n", $content);
// 冒泡排序函数
function bubble_sort(&$array) {
$is_ordered = true; // 认为默认是有序的
$array_length = count($array);
$temp = 0;
// 进行数组排序
for ($i = 0; $i < $array_length - 1; $i++) {
for ($j = 0; $j < $array_length - 1 - $i; $j++) {
if ($array[$j] > $array[$j + 1]) {
$temp = $array[$j];
$array[$j] = $array[$j + 1];
$array[$j + 1] = $temp;
$is_ordered = false; // 数组是无序的
}
}
// 判断是否可以结束数组的排序
if (!$is_ordered) {
$is_ordered = true; // 再次认为数组是有序的
} else {
break; // 此时数组是有序的,无需继续循环,跳出外层for循环。
}
}
}
// 调用函数
bubble_sort($array);
foreach ($array as $key => $value) {
echo "$value <br />";
}
?>

其中text.txt文件内容:
1
3
20
5
12
8
6

E. php快速排序算法

<?php
function quick_sort($arr) {
// 判断是否需要继续
if (count($arr) <= 1) {
return $arr;
}
$middle = $arr[0]; // 中间值
$left = array(); // 小于中间值
$right = array();// 大于中间值

// 循环比较
for ($i=1; $i < count($arr); $i++) {
if ($middle < $arr[$i]) {
// 大于中间值
$right[] = $arr[$i];
} else {
// 小于中间值
$left[] = $arr[$i];
}
}
// 递归排序两边
$left = quick_sort($left);
$right = quick_sort($right);
// 合并排序后的数据,别忘了合并中间值
return array_merge($left, array($middle), $right);
}
$arr = array(25,133,452,364,5876,293,607,365,8745,534,18,33);
echo '<pre>';
var_mp($arr);
var_mp(quick_sort($arr));

F. 使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组

这个主要就是用for循环做的:第一步是用第一个数字2和其他的数字比较:4,6,8,2然后用4和其他数字比较:6,8,4,2然后用6和其他数字比较:8,6,4,2最后就是8,6,4,2

G. php几种排序算法实例详解

下面给你介绍四种排序方法:

1) 插入排序(Insertion Sort)的基本思想是:
每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中的适当位置,直到全部记录插入完成为止。实现代码如下:

H. 如何使用强大的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也能满足你的要求。你只要使用asort()函数来代替先前提到的ksort()函数就可以了。如Listing E所示:
Listing E
<?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");asort($data); print_r($data);
?>
下面就是它的输出结果。请注意这个结果与上面使用ksort()函数所得到的结果的不同——在这两种情况中,都是按字母顺序进行排序的,但是它们是根据数组的不同字段进行排序的。
同时,请注意关键字-值之间的联系会始终保持;它只是关键字-值对排序后的一种方式,排序并不会改变它们的对应关系。
Array ([DE] => Germany
[IN] => India
[ES] => Spain
[US] => United States
)
现在,你肯定能猜到这种排序也可以进行倒排,它使用arsort()函数完成这个功能。Listing F就是一个例子:
Listing F
<?php $data = array("US" => "United States", "IN" => "India", "DE" => "Germany", "ES" => "Spain");arsort($data); print_r($data);
?>
下面是它的输出结果,根据值按字母表顺序进行倒排。将下面的结果与用krsort()函数进行倒排后生成的结果进行比较,就能很容易明白两者的不同了。
Array ([US] => United States
[ES] => Spain
[IN] => India
[DE] => Germany
)
自然语言排序
PHP有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则。这种特性称为自然语言排序,当创建模糊逻辑应用软件的时候这种排序方式非常有用。下面大家可以来看看它的一个简单例子,如Listing G所示:
Listing G
<?php $data = array("book-1", "book-10", "book-100", "book-5"); sort($data);print_r($data);
natsort($data); print_r($data);?>
它的输出结果如下:
Array ([0] => book-1
[1] => book-10
[2] => book-100
[3] => book-5
)
Array
(
[0] => book-1
[3] => book-5
[1] => book-10
[2] => book-100
)
它们的不同已经很清楚了:第二个排序结果更直观,更“人性化”,然而第一个则更符合算法规则,更具“计算机”特点。
自然语言能进行倒排吗?答案是肯定的!只要对natsort()的结果使用array_reverse()函数就可以了,Listing H就是一个简单例子:
Listing H
<?php $data = array("book-1", "book-10", "book-100", "book-5");natsort($data); print_r(array_reverse($data));
?>
下面是它的输出结果:
Array ([0] => book-100
[1] => book-10
[2] => book-5
[3] => book-1
)
根据用户自定义的规则排序
PHP也能让你定义自己的排序算法,你可以通过创建你自己的比较函数,并把它传递给usort()函数。如果第一个参数比第二个参数“小”的话,比较函数必须返回一个比0小的数,如果第一参数比第二个参数“大”的话,比较函数应该返回一个比0大的数。
Listing I就是这样的一个例子,在这个例子中根据它们的长度对数组元素进行排序,最短的项放在最前面:
Listing I
<?php $data = array("[email protected]", "[email protected]", "[email protected]", "[email protected]");usort($data, 'sortByLen');
print_r($data); function sortByLen($a, $b) {
if (strlen($a) == strlen($b)) {
return 0;
} else {
return (strlen($a) > strlen($b)) ? 1 : -1;
}
}
?>
这样,就创建了我们自己的比较函数,这个函数使用strlen()函数比较每一个字符串的个数,然后分别返回1,0或-1.这个返回值是决定元素排列的基础。下面是它的输出结果:
Array ([0] => [email protected]
[1] => [email protected]
[2] => [email protected]
[3] => [email protected]
)
自然语言排序
PHP有一个非常独特的排序方式,这种方式使用认知而不是使用计算规则。这种特性称为自然语言排序,当创建模糊逻辑应用软件的时候这种排序方式非常有用。下面大家可以来看看它的一个简单例子,如Listing G所示:
Listing G
<?php $data = array("book-1", "book-10", "book-100", "book-5"); sort($data);print_r($data);
natsort($data); print_r($data);?>
它的输出结果如下:
Array ([0] => book-1
[1] => book-10
[2] => book-100
[3] => book-5
)
Array
(
[0] => book-1
[3] => book-5
[1] => book-10
[2] => book-100
)
它们的不同已经很清楚了:第二个排序结果更直观,更“人性化”,然而第一个则更符合算法规则,更具“计算机”特点。
自然语言能进行倒排吗?答案是肯定的!只要对natsort()的结果使用array_reverse()函数就可以了,Listing H就是一个简单例子:
Listing H
<?php $data = array("book-1", "book-10", "book-100", "book-5");natsort($data); print_r(array_reverse($data));
?>
下面是它的输出结果:
Array ([0] => book-100
[1] => book-10
[2] => book-5
[3] => book-1
)
根据用户自定义的规则排序
PHP也能让你定义自己的排序算法,你可以通过创建你自己的比较函数,并把它传递给usort()函数。如果第一个参数比第二个参数“小”的话,比较函数必须返回一个比0小的数,如果第一参数比第二个参数“大”的话,比较函数应该返回一个比0大的数。
Listing I就是这样的一个例子,在这个例子中根据它们的长度对数组元素进行排序,最短的项放在最前面:
Listing I
<?php $data = array("[email protected]", "[email protected]", "[email protected]", "[email protected]");usort($data, 'sortByLen');
print_r($data); function sortByLen($a, $b) {
if (strlen($a) == strlen($b)) {
return 0;
} else {
return (strlen($a) > strlen($b)) ? 1 : -1;
}
}
?>
这样,就创建了我们自己的比较函数,这个函数使用strlen()函数比较每一个字符串的个数,然后分别返回1,0或-1.这个返回值是决定元素排列的基础。下面是它的输出结果:
Array ([0] => [email protected]
[1] => [email protected]
[2] => [email protected]
[3] => [email protected]
)
多维排序
最后,PHP也允许在多维数组上执行一些比较复杂的排序——例如,首先对一个嵌套数组使用一个普通的关键字进行排序,然后再根据另一个关键字进行排序。这与使用SQL的ORDER BY语句对多个字段进行排序非常相似。为了能更好的明白它是如何工作的,请仔细看Listing J所举的例子:
Listing J
<?php $data = array(array("id" => 1, "name" => "Boney M", "rating" => 3),
array("id" => 2, "name" => "Take That", "rating" => 1),
array("id" => 3, "name" => "The Killers", "rating" => 4),
array("id" => 4, "name" => "Lusain", "rating" => 3),
); foreach ($data as $key => $value) {
$name[$key] = $value['name'];
$rating[$key] = $value['rating'];
}
array_multisort($rating, $name, $data); print_r($data);?>
这里,我们在$data数组中模拟了一个行和列数组。然后,我使用array_multisort()函数对数据集合进行重排,首先是根据rating进行排序,然后,如果rating相等的话,再根据name排序。它的输出结果如下:
Array ([0] => Array
(
[id] => 2
[name] => Take That
[rating] => 1
) [1] => Array
(
[id] => 1
[name] => Boney M
[rating] => 3
)
[2] => Array
(
[id] => 4
[name] => Lusain
[rating] => 3
)
[3] => Array
(
[id] => 3
[name] => The Killers
[rating] => 4
)
)
array_multisort()函数是PHP中最有用的函数之一,它有非常广泛的应用范围。另外,就如你在例子中所看到的,它能对多个不相关的数组进行排序,也可以使用其中的一个元素作为下次排序的基础,还可以对数据库结果集进行排序。
这些例子应该让你对PHP中各种数组排序函数的使用有了初步的了解,也向你展示了一些隐藏在PHP数组处理工具包的内部功能。
最后,祝你能愉快的使用这些功能!

I. 常见的php排序算法

常见的php排序算法

本文汇总了常见的php排序算法,在进行算法设计的时候有不错的借鉴价值。现分享给大家供参考之用。具体如下:

一、插入排序

用文字简单的描述,比如说$arr = array(4,2,4,6,3,6,1,7,9); 这样的一组数字进行顺序排序:

那么,首先,拿数组的第二个元素和第一元素比较,假如第一个元素大于第二元素,那么就让两者位置互换,接下来,拿数组的第三个元素,分别和第二个,第一个元素比较,假如第三个元素小,那么就互换。依次类推。这就是插入排序,它的时间频度是:1+2+...+(n-1)=(n^2)/2。则它的时间复杂度为O(n^2).

php实现代码如下:

<?phpfunction Sort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=1;$i<$count;$i++){ tmp="$arr[$i];" j="">=0&&$arr[$j]<$arr[$i]){ return="">

二、选择排序

选择排序用语言描述的话,可以这样,如:$arr = array(4,3,5,2,1);

首先,拿第一个和后面所有的比,找出最小的那个数字,然后和第一个数组互换(当然,如果是第一个最小,那么就不用互换了),接着循环,即:拿第二个和后面的比较,找出最小的数字,然后和第二个数字互换,依次类推,也就是说每次都是找出剩余最小的值。 可得到:第一次,时间频度 是n, (第一个和后面的n-1个比较,找到最小的,再看是不是第一个,不是第一个的话进行互换) 在往后,依次是 减一 。 它的时间复杂度,也是O(n^2);

php实现代码如下:

<?phpfunction selectSort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=0;$i<$count;$i++){ $min=$i; for(j=$i+1;$j<$count;$j++){>$arr[$j]){ $min = $j; //找到最小的那个元素的下标 } } if($min!=$i){//如果下标不是$i 则互换。 $tmp= $arr[$i]; $arr[$i] = $arr[$min]; $arr[$min] = $tmp; } } return $arr; }?>

三、冒泡排序

冒泡排序其实上是和选择排序相比,并无明显差别。都是找到最小的,放到最左端。依次循环解决问题。差别在于冒泡排序的交换位置的次数较多,而选择排序则是找到最小的元素的下标,然后直接和最左端的交换位置。

php实现代码如下:

<?phpfunction selectSort($arr){ $count = count($arr); if($count<2){ return $arr; } for($i=0;$i<$count;$i++){ for(j=$i+1;$j<$count;$j++){>$arr[$j]){ $tmp= $arr[$i]; $arr[$i] = $arr[$i]; $arr[$i] = $tmp; } } } return $arr; }?>

四、快速排序

快速排序,用语言来形容的话,从数组中选择一个值$a,然后和其余元素进行比较,比$a大的放到数组right中,反之,放到数组left中。然后将left right 分别进行递归调用,即:再细分left right ,最后进行数组的合并。

php实现快速排序:

<?phpfunction mySort($arr){ $count = count($arr); if($count<2){ return $arr; } $key = $arr[0];//选择第一个元素作为比较元素,可选其他 $left = array(); $right = array(); for($i=1;$i<$count;$i++){ key="">=$arr[$i]){ $left[] = $arr[$i]; }else{ $right[] = $arr[$i]; } } $left = mySort($left); $right = mySort($right); $result = array_merge($left,$right); return $result; }?>

五、归并排序

其实归并排序是一种拆分,合并的思想。和快速排序思想有共通之处,左边一堆,右边一堆,然后进行合并。通过递归实现排序。 区别之处呢? 他们的区别也是思想上本质的区别,快速排序的拆分,是选择了特定的值进行大小比较,从而分为left 和 right 。也就是小的一堆放入left,大的一堆放入right。而后,小的left 再细分为left1 right1。。。。通过进行类似的递归完成排序。也就是说,一直细分下去,递归最末尾的left1就是最小值。

而归并排序,是从几何上的左右切分,一直递归切分成2或者1的'最小粒度的数组,然后才开始进行比较大小,然后合并。此处的比较大小是:儿子left的元素 和儿子的right元素 进行比较,而后进行排序合并成为父亲left或者right。在此,直到拿到各自排序合并完成最后两个数组:最起初的left 和right,也仅仅直到他们各自的顺序,并不能确认整个数组的顺序,还是需要通过最终的left right 比较后合并才能完成真正意义上的排序。

<?phpfunction gbSort($arr){ if(count($arr)<=1){return min="floor(count($arr)/2);//取中间数字进行拆分" left="gbSort($left);" right="gbSort($right);" return="" function="">$right[0] ? array_shift($right) : array_shift($left); //进行比较,小的移除,并且放入到数组$m中。 } return arr_merge($m,$left,$right);//进行合并(由于不知道left right 哪个会为空,所以进行统一合并)}?>

六、堆排序

本例中fixDown函数实现对某一个节点的向下调整,这里默认的是起始节点为1,方便计算父子节点关系

注:

起始节点为1的父子关系: 父节点k, 子节点为2K、2k+1 子节点j, 父节点为 floor(j/2) floor为向下取整

起始节点为0的父子关系: 父节点k, 子节点为2K+1, 2k+2 子节点j, 父节点为 floor((j-1)/2)

参数$k为调整点位置, $lenth为数组长度,也就是从1起始到最后一个节点的坐标.

<?phpfunction fixDown(&$arr, $k, $lenth){while(2*$k<=$lenth) { //只要当前节点有子节点, 就需要继续该循环 $j = $k*2; if ($j<$lenth && $arr[$j]<$arr[$j+1]) $j++; // 只要子节点有右节点,且右节点比左节点大,那么切换到右节点操作。 if ($arr[$j] < $arr[$k]) break; // 如果子节点都没有父节点大, 那么调整结束。 exch($arr[$j], $arr[$k]); $k = $j; }}function exch(&$a, &$b) { $tmp = $a; $a = $b; $b = $tmp;}function headSort(&$arr){ $len = count($arr); array_unshift($arr, NULL); for($i=$len/2;$i>=1;$i--) { fixDown($arr, $i, $len); } while($len>1) { exch($arr[1], $arr[$len]); fixDown($arr, 1, --$len); } array_shift($arr);}$arr = array(4,6,4,9,2,3);headSort($arr);?>

希望本文所述排序算法实例对大家的php程序设计有所帮助。

;

J. PHP中的快速排序算法如何实现倒序

/*
php中的快速排序,并且倒序输出
*/
function quickSort($array)
{
if(!isset($array[1]))
return $array;
$mid = $array[0]; //获取一个用于分割的关键字,一般是首个元素
$leftArray = array();
$rightArray = array();

foreach($array as $v)
{
if($v > $mid)
$rightArray[] = $v; //把比$mid大的数放到一个数组里
if($v < $mid)
$leftArray[] = $v; //把比$mid小的数放到另一个数组里
}

$leftArray = quickSort($leftArray); //把比较小的数组再一次进行分割
$leftArray[] = $mid; //把分割的元素加到小的数组后面,不能忘了它哦

$rightArray = quickSort($rightArray); //把比较大的数组再一次进行分割
return array_reverse(array_merge($leftArray,$rightArray)); //组合两个结果后倒序排列
}

阅读全文

与排名算法php相关的资料

热点内容
卡尔曼滤波算法书籍 浏览:769
安卓手机怎么用爱思助手传文件进苹果手机上 浏览:844
安卓怎么下载60秒生存 浏览:803
外向式文件夹 浏览:240
dospdf 浏览:431
怎么修改腾讯云服务器ip 浏览:392
pdftoeps 浏览:496
为什么鸿蒙那么像安卓 浏览:736
安卓手机怎么拍自媒体视频 浏览:186
单片机各个中断的初始化 浏览:724
python怎么集合元素 浏览:481
python逐条解读 浏览:833
基于单片机的湿度控制 浏览:499
ios如何使用安卓的帐号 浏览:883
程序员公园采访 浏览:812
程序员实战教程要多长时间 浏览:979
企业数据加密技巧 浏览:135
租云服务器开发 浏览:814
程序员告白妈妈不同意 浏览:336
攻城掠地怎么查看服务器 浏览:601