php-数组的相关函数及排序算法
一、数组的相关函数
1、排序函数
-
sort():顺序排序(下标重排)
-
krsort():逆序排序
-
2、指针函数
-
reset():重置指针,将数组指针回到首位
-
end():重置指针,将数组指针指到最后一个元素
-
-
prev():指针上移,取得上一个元素的值
-
prev()的【注意事项】:next和prev会移动指针,有可能导致指针移动到最前或者最后〈离开数组),导致数组不能使用,通过next和prex,不能回到真确的指针位置。只能通过end或者reset进行指针重置
- current():当前指针对应的元素值
- key():当前指针对应的下标值
-
count():统计数组中的数量
-
array_push():往数组中加入一个元素(数组后面)
-
array_pop():从数组中取出一个元素(数组后面)
-
array_shift():从数组中取出一个元素(数组前面)
-
array_unshift():往数组中加入一个元素(数组前面)
-
-
in_array():判断一个元素在数组中是否存在
-
array_key():获取一个数组的所有下标,返回一个索引数组
-
二、排序算法
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 走访数列的正作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
冒泡排序的算法思路:
1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。
3)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
2、选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法(比如序列[5,5,3]第一次就将第一个[5] 与[3]交换,导致第一个5挪动到第二个5后面)。
选择排序的算法思路:
1)假设第一个元素为最小元素,记下下标。
2)寻找右侧剩余的元素,如果有更小的,重新记下最新的下标。
3)如果有新的最小的,交换两个元素。
4)往右重复以上步骤,直到元素本身是最后一个。
插入排序(Insert sort),插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,是稳定的排序方法。
插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位器),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。
插入排序的算法思路:
1)设置监视哨r[o],将待插入纪录的值赋值给r[o];
2)设置开始查找的位置j;
3)在数组中进行搜索,搜索虫将第j企纪录后移,直r[0].key>=r[j].key为止;
4)将r[o]插入r[j+1]的位置上。
4、快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独 立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对
设要排序的数组是A[o]……A[n-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。
快速排序的算法是:
1)从数组中选出一个元素〈通常第一个),作为参照对象。
2)定义两个数组,将目标数组中剩余的元素与参照元素挨个比较:小的放到一个数组,大 的放到另外一个数组。
3)第二步执行完之后,前后的数组顺序不确定,但是确定了自己的位置。
4)将得到的小数组按照第1到第3部重复操作《子问题》。
5)回溯最小数组(一个元素)。
$arr=array(1,6,3,4,9,2,7,8);