PHP的排序算法跟查找算法

排序算法:

(1)冒泡排序

 1 $arr = array(15,8,20,50,37,85,10,5,11,4);
 2   //冒泡排序
 3   function maoPao($arr){
 4     for($i = 0; $i < count($arr)-1; $i++){
 5         for($j = 0; $j < count($arr)-1; $j++){
 6             if($arr[$j] > $arr[$j+1]){
 7                 $temp = $arr[$j];
 8                 $arr[$j] = $arr[$j+1];
 9                 $arr[$j+1] = $temp;
10             }
11         }
12     }
13     return $arr;
14   }

(2)快速排序

 1 $arr = array(15,8,20,50,37,85,10,5,11,4);
 2   //快速排序
 3   function fastSort($arr){
 4     $len = count($arr);
 5
 6     if($len <= 1){
 7         return $arr;
 8     }
 9
10     $key = $arr[0];
11     $left = array();
12     $right = array();
13
14     for($i = 1; $i < $len; $i++){
15         if($arr[$i] > $key){
16             $right[] = $arr[$i];
17         } else {
18             $left[] = $arr[$i];
19         }
20     }
21
22     $left = fastSort($left);
23     $right = fastSort($right);
24
25     return array_merge($left, array($key), $right);
26   }

查找算法:

(1):普通 (适用于无规则的数组,但效率相对较低)

1 function search($arr, $val){
2     foreach($arr as $k => $v){
3         if($v == $val){
4             return $k;
5         }
6     }
7     return -1;
8 }

(2):二分查找(仅适用于有序的索引数组,效率较高)

 1 //二分查找法
 2   function binSearch($arr, $val){
 3     $len = count($arr);
 4     $low = 0;
 5     $end = $len - 1;
 6
 7     while($low <= $end){
 8         $mid = floor(($low+$end)/2);
 9
10         if($arr[$mid] == $val){
11             return $mid;
12         } else if($arr[$mid] > $val){
13             $end = $mid - 1;
14         } else {
15             $low = $mid + 1;
16         }
17     }
18
19     return -1;
20   }
时间: 2024-10-31 16:07:57

PHP的排序算法跟查找算法的相关文章

排序算法和查找算法

示例:分别用冒泡排序,快速排序,选择排序,插入排序将数组中的值从小到大的顺序排序 $array = (9,5,1,3,6,4,8,7,2); 1.冒泡排序算法 //思路:两两比较待排序数据元素的大小,发现两个数据元素的次序相反即进行交换,直到没有反序的数据元素为止 function bubbleSort($array){         $lg = count($array);         if($lg <=1){             return $array;         }  

STL_算法_查找算法(lower_bound、upper_bound、equal_range)

C++ Primer 学习中. .. 简单记录下我的学习过程 (代码为主) //全部容器适用(O(log(n)))    已序区间查找算法 lower_bound()        //找第一个符合的元素,返回位置迭代器 upper_bound()        //找最后一个符合的元素.返回位置迭代器 equal_range()        //找一对迭代器pair(<>,<>) 关联式容器有等效的成员函数.性能更佳 #include<iostream> #incl

JS中数据结构之检索算法(查找算法)

顺序查找 查找指定值 function seqSearch(arr, data) { for (var i = 0; i < arr.length; ++i) { if (arr[i] == data) { return true; } } return false; } 查找最小值和最大值 function findMin(arr) { var min = arr[0]; for (var i = 1; i < arr.length; ++i) { if (arr[i] < min)

STL_算法_查找算法(find、find_if)

C++ Primer 学习中. .. 简单记录下我的学习过程 (代码为主) find . find_if /**********************线性查找O(n) find(); find_if(); 注意: 1.假设是已序区间,能够使用区间查找算法 2.关联式容器(set,map)有等效的成员函数find();时间复杂度O(log(n)) 3.string 有等效的成员函数find(); **********************/ #include<iostream> #inclu

算法----二分查找算法

二分查找算法是在有序数组中用到的较为频繁的一种算法,在未接触二分查找算法时,最通用的一种做法是,对数组进行遍历,跟每个元素进行比较,其时间为O(n).但二分查找算法则更优,因为其查找时间为O(lgn),譬如数组{1, 2, 3, 4, 5, 6, 7, 8, 9},查找元素6,用二分查找的算法执行的话,其顺序为: 1.第一步查找中间元素,即5,由于5<6,则6必然在5之后的数组元素中,那么就在{6, 7, 8, 9}中查找, 2.寻找{6, 7, 8, 9}的中位数,为7,7>6,则6应该在7

数据结构和算法--7查找算法

1.常用的查找算法 1) 顺序(线性)查找 2) 二分查找/折半查找 3) 插值查找 4) 斐波那契查找 2.查找 1)线性查找 A.题目: 有一个数列[1,43,22,-10,0],判断数列中是否包含此名称,如果找到了,就提示找到,并给出下标值. B,思路: 逐一查找 C.代码 package com.offcn.search; //线性查找 public class SeqSearch { public static void main(String[] args){ int[] arr =

Java学习资料-Java常用算法-二分查找算法

binarySearch源程序 public class binarySearch { public static int binarySearch(int[] dataset ,int data) { int beginIndex = 0; //定义起始位置 int endIndex = dataset.length - 1;  //定义结束位置 int midIndex = -1; //定义中点 if(data <dataset[beginIndex]||data>dataset[endI

常用的查找算法

顺序查找 二分法查找 分块查找 散列表查找(哈希表) 顺序查找的基本思想: 从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功:若扫描结束后,仍未找到关键字等于a的结点,则查找失败. 说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到就失败.很明显的缺点就是查找效率低. 适用于线性表的顺序存储结构和链式存储结构. 计算平均查找长度. 例如上表,查找1,需要1次,查找2需要2次,依次往下推,可知查找16需要16次, 可以看

[Data Structure &amp; Algorithm] 七大查找算法

查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找.本文简单概括性的介绍了常见的七种查找算法,说是七种,其实二分查找.插值查找以及斐波那契查找都可以归为一类——插值查找.插值查找和斐波那契查找是在二分查找的基础上的优化查找算法.树表查找和哈希查找会在后续的博文中进行详细介绍. 查找定义:根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素(或记录). 查找算法分类: 1)静态查找和动态查找: 注:静态或者动态都是针对查找表而言