
小算法
讨吃的讨吃了
一个普通人。
展开
-
计数排序PHP实现
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。[1]当然这是一种牺牲空间换取时间的做法,而且当O(k)>O(n*log(n))的时候其效率反而不如基于比较的排序(基于比较的排序的时间复杂度在理论上的下限是O(n*log(n)), 如归并排序,堆排序)<?php/** * 计数排序。 * 时间复杂度为O(n),...原创 2021-08-10 11:40:21 · 184 阅读 · 0 评论 -
给你四个坐标点,判断它们能不能组成一个矩形,如判断([0,0],[0,1],[1,1],[1,0])能组成一个矩形。
我是算的所有点距离,然后判断对角线和边长分别相同。<?php$p1 = [0, 0];$p2 = [0, 2];$p3 = [2, 2];$p4 = [2, 0];$temp = array_diff_assoc($p1,$p2,$p3,$p4);if(!$temp) echo "四个点同一坐标,不能组成矩形";die;//放在数组中$fourP = [$p1, $p2, $p3, $p4];$count = count($fourP);for ($i = 0; $i &l原创 2020-07-01 17:38:16 · 1472 阅读 · 0 评论 -
PHP实现二分查找(递归版本)
首先说下二分查找,需要在数组的数据结构上应用,而且前提是这个数组是有序的。不管是升序还是降序。一般数组的查找都是顺序查找,也就是逐个比对。而二分查找是分治思想的一个代表性应用。大概思想是 拿所想找的数字,去和数组中间的值比较。如果相等,直接返回KEY值,如果大于,拿右边的数组再去进行一分为二。如果小于,拿左边的数组进行对比。知道数组为空。下面看具体代码实现。 function handle() { $arr = array(2, 11, 23, 5, 888, 111, .原创 2020-05-11 11:24:07 · 545 阅读 · 0 评论 -
PHP实现选择排序
选择排序比较简单的一种排序,就是每次确定一个元素的正确位置, 首先拿出第一个元素来,和其他元素比较,使第一个元素为最小或者最大值。第二次拿出第二个,然后再和其他的比较,换位置。看代码吧 function handle() { $arr = array(2,11,23,5,888,111,22,34,56,134,22); echo...原创 2020-04-29 13:58:19 · 267 阅读 · 0 评论 -
PHP实现简单插入排序
好多年前用C写过,觉得挺简单的,但是今天用PHP重写了一下,写了两个小时,哈哈,有点丢人。 我是每次有新元素,先占了一个位置。然后如果发现这个位置没动,就插到最左边。下边看代码吧。 public function handle() { $arr = array(2,11,23,5,888,111,22,34,56,134,22); ...原创 2020-04-29 11:13:07 · 203 阅读 · 0 评论 -
PHP实现冒泡排序
冒泡排序是很经典,也是大家算法入门的第一个小算法吧,我今天再用PHP实现以下。还是先简单介绍下思路。冒泡排序就是说,每次拿出第一个数字来,作为最小值(或者最大),然后从第二个开始和他依次比较,如果比他还小,换下位置嘛。然后第一个数字经过第一次处理,就是最小的值。它的时间复杂度为O(n²)次。就是都按照最差的来, 比如1,2,3,这样,非要排位3,2,1.下面看代码function ...原创 2020-04-28 15:58:29 · 250 阅读 · 0 评论 -
PHP实现快速排序
最近打算把常用的小算法用PHP实现下先从快速排序开始吧。先说下快速排序的基本思路。就是分治法,每次拿出第一个值来,比它小的往右边,比它小的放左边。然后左边的数组在进行上述的过程,右边的也一样。最后把它们合并到一起。就完成啦。理论上时间复杂度为O(nlogn)。对了,时间复杂度顺便复习一下,指的是主要程序运行的次数,而不是时间哦。 下面放下代码。<?phpnamespace ...原创 2020-04-28 15:03:41 · 164 阅读 · 0 评论