zoukankan      html  css  js  c++  java
  • php-数组的相关函数及排序算法


    一、数组的相关函数

    1、排序函数

    都是按照ascii码比较,可以进行英文比较

    • sort():顺序排序(下标重排)

    • rsort():逆序排序

    • asor():顺序排序(下标保留)

    • arsort():逆序排序

    • ksort():顺序排序(按照键名(下标))

    • krsort():逆序排序

    • shuffle():随机打乱数组元素(值打乱,数组下标重排)

    2、指针函数
    • reset():重置指针,将数组指针回到首位

    • end():重置指针,将数组指针指到最后一个元素

     

    • next():将数组中的内部指针向下移动一位,取得下一个元素的值

    • prev():指针上移,取得上一个元素的值

    • prev()的【注意事项】:next和prev会移动指针,有可能导致指针移动到最前或者最后〈离开数组),导致数组不能使用,通过next和prex,不能回到真确的指针位置。只能通过end或者reset进行指针重置

    • current():当前指针对应的元素值

    • key():当前指针对应的下标值
    3、其他函数
    • count():统计数组中的数量

    • array_push():往数组中加入一个元素(数组后面)

    • array_pop():从数组中取出一个元素(数组后面)

    • array_shift():从数组中取出一个元素(数组前面)

    • array_unshift():往数组中加入一个元素(数组前面)

    • array_reverse():数组元素反过来

    • in_array():判断一个元素在数组中是否存在

    • array_key():获取一个数组的所有下标,返回一个索引数组

    • array_values():获取一个数组的所有值,返回一个索引数组

    二、排序算法

    1、冒泡排序

    冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 走访数列的正作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

     

    冒泡排序的算法思路:

    1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。

    2)对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。

    3)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

    2、选择排序

    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。选择排序是不稳定的排序方法(比如序列[5,5,3]第一次就将第一个[5] 与[3]交换,导致第一个5挪动到第二个5后面)。

    选择排序的算法思路:

    1)假设第一个元素为最小元素,记下下标。

    2)寻找右侧剩余的元素,如果有更小的,重新记下最新的下标。

    3)如果有新的最小的,交换两个元素。

    4)往右重复以上步骤,直到元素本身是最后一个。

    3、插入排序

    插入排序(Insert sort),插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,是稳定的排序方法。

    插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位器),而第二部分就只包含这一个元素(即待插入元素)。在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中。

     

    插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。

    插入排序的算法思路:

    1)设置监视哨r[o],将待插入纪录的值赋值给r[o];

    2)设置开始查找的位置j;

    3)在数组中进行搜索,搜索虫将第j企纪录后移,直r[0].key>=r[j].key为止;

    4)将r[o]插入r[j+1]的位置上。

    1、认定第一个元素已经排好序;

    2、取出第二个元素,作为待插入数据;

    3、与已经排好序的数组的最右侧元素开始进行比较;

    4、如果后面的小于前面的:说明前面已经排好序的那个数组元素不在对的位置(向后移一个),然后让新的元素填充进去(继卖向前比:高级);

    5、重复前面的步骤:直到当前元素插入到对位置;

    6、重复以上步骤,直到所有的数组元素都插入到对的位置。

    4、快速排序

    快速排序(Quicksort)是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独 立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对 这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序 序列。(递归)

    设要排序的数组是A[o]……A[n-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。

    快速排序的算法是:

    1)从数组中选出一个元素〈通常第一个),作为参照对象。

    2)定义两个数组,将目标数组中剩余的元素与参照元素挨个比较:小的放到一个数组,大 的放到另外一个数组。

    3)第二步执行完之后,前后的数组顺序不确定,但是确定了自己的位置。

    4)将得到的小数组按照第1到第3部重复操作《子问题》。

    5)回溯最小数组(一个元素)。

    $arr=array(1,6,3,4,9,2,7,8);

  • 相关阅读:
    #2019120500009-LG 数据结构 优先队列(1)
    #2019120500008-LG 数据结构 栈(1)
    2019D1T1 格雷码
    #2019120500006-LG 迷宫
    #2019120500004-LG 单词方阵
    #2019110700005
    hdu 1827强连通分量
    HDU 5691 状压dp
    HDU 4734--基础数位dp(递推)
    HDU 4638--莫队算法
  • 原文地址:https://www.cnblogs.com/eighty-five/p/13643074.html
Copyright © 2011-2022 走看看