注:为方便描述,下面的排序全为正序(从小到大排序)
成都创新互联服务项目包括天心网站建设、天心网站制作、天心网页制作以及天心网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,天心网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到天心省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
假设有一个数组[a,b,c,d]
冒泡排序依次比较相邻的两个元素,如果前面的元素大于后面的元素,则两元素交换位置;否则,位置不变。具体步骤:
1,比较a,b这两个元素,如果ab,则交换位置,数组变为:[b,a,c,d]
2,比较a,c这两个元素,如果ac,则位置不变,数组变为:[b,a,c,d]
3,比较c,d这两个元素,如果cd,则交换位置,数组变为:[b,a,d,c]
完成第一轮比较后,可以发现最大的数c已经排(冒)在最后面了,接着再进行第二轮比较,但第二轮比较不必比较最后一个元素了,因为最后一个元素已经是最大的了。
第二轮比较结束后,第二大的数也会冒到倒数第二的位置。
依次类推,再进行第三轮,,,
就这样最大的数一直往后排(冒),最后完成排序。所以我们称这种排序算法为冒泡排序。
选择排序是一种直观的算法,每一轮会选出列中最小的值,把最小值排到前面。具体步骤如下:
插入排序步骤大致如下:
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。
步骤:
从数列中挑出一个元素,称为 “基准”(pivot),
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
可以把数字放到数组中,然后使用sort
将数组排序:例如
$arr=array(3,1,20,10,99,5);
asort($arr);
print_r($arr)
结果为:
Array
(
[0]
=
1
[1]
=
3
[2]
=
5
[3]
=
10
[4]
=
20
[5]
=
99
)
然后再做你想要的操作
插入排序(Insertion Sort) 是一种较稳定 简单直观的排序算法 插入排序的工作原理 是通过构建有序序列 对于未排序的数据 在有序序列中从后向前扫描 找到合适的位置并将其插入 插入排序 在最好情况下 时间复杂度为O(n);在最坏情况下 时间复杂度为O(n );平均时间复杂度为O(n )
插入排序示例图
/**
* 数据结构与算法(PHP实现) - 插入排序(Insertion Sort)。Tw.WiNGwit
*
* @author 创想编程(TOPPHP.ORG)
* @copyright Copyright (c) 2013 创想编程(TOPPHP.ORG) All Rights Reserved
* @license /licenses/mit-license.php MIT LICENSE
* @version 1.0.0 - Build20130613
*/
class InsertionSort {
/**
* 需要排序的数据数组。
*
* @var array
*/
private $data;
/**
* 数据数组的长度。
*
* @var integer
*/
private $size;
/**
* 数据数组是否已排序。
*
* @var boolean
*/
private $done;
/**
* 构造方法 - 初始化数据。
*
* @param array $data 需要排序的数据数组。
*/
public function __construct(array $data) {
$this-data = $data;
$this-size = count($this-data);
$this-done = FALSE;
}
/**
* 插入排序。
*/
private function sort() {
$this-done = TRUE;
for ($i = 1; $i $this-size; ++$i) {
$current = $this-data[$i];
if ($current $this-data[$i - 1]) {
for ($j = $i - 1; $j = 0 $this-data[$j] $current; --$j) {
$this-data[$j + 1] = $this-data[$j];
}
$this-data[$j + 1] = $current;
}
}
}
/**
* 获取排序后的数据数组。
*
* @return array 返回排序后的数据数组。
*/
public function getResult() {
if ($this-done) {
return $this-data;
}
$this-sort();
return $this-data;
}
}
?
示例代码 1
2
3
4
$insertion = new InsertionSort(array(9, 1, 5, 3, 2, 8, 6));
echo '
', print_r($insertion-getResult(), TRUE), '
'; lishixinzhi/Article/program/PHP/201311/20783
1、在test.php文件内,使用header设置test.php执行的编码为utf8,避免输出中文的时候出现乱码。
2、在test.php文件内,创建一个测试的数组,例如,定义一个分类的数组,其对应的索引值分别为0,4,8。
3、在test.php文件内,使用array_values()方法将上一步的数据重新排序,并且从0开始,把重新排序的数组保存在$result变量中。
4、在test.php文件内,使用foreach方法遍历数组,其中$k为索引值,$v为索引值对应的数组值。
5、在test.php文件内,使用echo方法输出数组中的索引值和对应的数组值即可。