php几种常用的算法

<?php

// 选择排序

function select_sort($arr)

{

$count = count($arr);

for ($i = 0; $i < $count; $i ++) {

$k = $i;

for ($j = $i + 1; $j < $count; $j ++) {

if ($arr[$k] > $arr[$j])

$k = $j;

if ($k != $i) {

$tmp = $arr[$i];

$arr[$i] = $arr[$k];

$arr[$k] = $tmp;

}

}

}

return $arr;

}

// 插入排序

function insert_sort($arr)

{

$count = count($arr);

for ($i = 1; $i < $count; $i ++) {

$tmp = $arr[$i];

$j = $i - 1;

while ($arr[$j] > $tmp) {

$arr[$j + 1] = $arr[$j];

$arr[$j] = $tmp;

$j;

}

}

return $arr;

}

// 快速排序法

function quick($array)

{

if (count($array) <= 1) {

return $array;

}

$key = $array[0];

$l = array();

$r = array();

for($i=1;$i {

if ($array[$i] <= $key) {

$l[] = $array[$i];

} else {

$r[] = $array[$i];

}

}

$l = quick($l);

$r = quick($r);

return array_merge($l, array(

$key

), $r);

}

//冒泡排序

function maopao($arr)

{

$n = count($arr);

for($j=0;$j<$n-1;$j++)

{

for($i=$j+1;$i<=$n-1;$i++) {

if($arr[$j]>$arr[$i])

{

$t = $arr[$i];

$arr[$i] = $arr[$j];

$arr[$j]=$t;

}

}

}

return $arr;

}

时间: 2024-11-25 17:27:21

php几种常用的算法的相关文章

七种常用排序算法

七种常用排序算法 一.常见排序算法一览: 时间复杂度: 是一个函数,它定量描述了该算法的运行时间. 空间复杂度:一个算法在运行过程中临时占用存储空间大小的量度. 稳定性:保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同就稳定,反之不稳定. 视觉直观感受 7 种常用的排序算法 二.算法C#实现: 1. 直接插入排序: using System; using System.Collections.Generic; using System.Linq; using Sys

五种常用的算法设计技巧之二:分治算法

一,介绍 分治算法主要包含两个步骤:分.治.分,就是递归地将原问题分解成小问题:治则是:在解决了各个小问题之后(各个击破之后)合并小问题的解,从而得到整个问题的解 二,分治递归表达式 分治算法一般都可以写出一个递归表达式:比如经典的归并排序的递归表达式:T(N)=2T(N/2)+O(N) T(N)代表整个原问题,采用了分治解决方案后,它可以表示成: ①分解成了两个规模只有原来一半(N/2)的子问题:T(N/2) ②当解决完这两个子问题T(N/2)之后,再合并这两个子问题需要的代价是 O(N) 递

几种常用排序算法温习

几种常用排序算法温习 一. 简单排序方法 1.直接插入排序 基本思想:顺序地将待排序的记录按其关键码的大小插入到已排序的记录子序列的适当位置. 算法代码: //直接插入排序 public static void InsertSort(SeqList<int> seq) { if (seq.IsEmpty() || seq.GetLength() == 1) return; Console.Write("1.1 简单排序 排序前:"); seq.Display(); int

几种常用排序算法的python实现

1:快速排序 思想: 任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序. 一趟快速排序的算法是: 1)设置两个变量i.j,排序开始的时候:i=0,j=N-1: 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]: 3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]赋给A[i]: 4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大

几种常用排序算法(bubble、select、insert、shell、未完待续)

接下来两天重新看看几种常用的排序算法. 1.冒泡排序法 每次从 i=0开始比较相邻的元素,若arr[i]>arr[i+1],则交换它们.直到把最大的元素推向最后.回到 i=0,直至完成. 1 import java.util.Scanner; 2 class bubble 3 { 4 public static void main(String[] args) 5 { 6 int n,temp; 7 int i,j; 8 int[] arr=new int[10000]; 9 Scanner s

视觉直观感受7种常用排序算法

视觉直观感受若干常用排序算法 1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性. 步骤: 从数列中挑出一个元素,称为 "基准"(pivo

几种常用排序算法 (一)

八大常用排序算法详细分析 包括复杂度: 排序有可以分为以下几类: (1).交换排序:冒泡排序.快速排序 (2).选择排序:直接选择排序.堆排序 (3).插入排序:直接插入排序.希尔排序 (4).归并排序 (5).基数排序(桶排序) 1.冒泡排序 顾名思义,冒泡排序就是用气泡从下往上冒的原理,将气泡(较小或较大的数)依次往前移. 具体做法(升序):设总共有N个元素,则至少需要进行N-1次冒泡.一次排序排序中,若前一个元素大于后一个元素,则交换两个元素,然后在依次判  断后面两两相邻元素大小并进行交

几种常用hash算法及原理

计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数据.用“人 类”的语言描述单向函数就是:如果某个函数在给定输入的时候,很容易计算出其结果来:而当给定结果的时候,很难计算出输入来,这就是单项函数.各种加密函 数都可以被认为是单向函数的逼近.Hash函数(或者成为散列函数)也可以看成是单向函数的一个逼近.即它接近于满足单向函数的定义. Hash函数还有另外的含义.实际中的Hash函数是指把一个大范围映射到一个小范围.把大

数据结构——排序——8种常用排序算法稳定性分析

首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同.在简单形式化一下,如果Ai = Aj, Ai原来在位置前,排序后Ai还是要在Aj位置前. 其次,说一下稳定性的好处.排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用.基数排序就是这样,先按低位排序,逐次按高位排序,低位相同的元素其顺序再高位也相同时是不会改变的.另外,如果排序算法稳定,对基于比较的排序算法而言

【轻松学排序算法】眼睛直观感受几种常用排序算法(转)

1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性. 步骤: 从数列中挑出一个元素,称为 "基准"(pivot), 重新排序数列,所有元素