php常见的一些基础算法

1.冒泡算法

冒泡算法是将一个未排序的序列,从前往后对相邻的两个值依次进行对比和调整,大的值下沉,小的值上冒。

$arr = array(12,45,23,25,14,9,5,46,56,98,57);
function bsort($arr){
    $len = count($arr);
    for($i=1;$i<$len;$i++){
        for($k=0;$k<$len-$i;$k++){
            if($arr[$k]>$arr[$k+1]){
                $tmp=$arr[$k+1];
                $arr[$k+1]=$arr[$k];
                $arr[$k]=$tmp;
            }
        }
    }
    return $arr;
}

2.选择排序

选择排序是在一组未排序的序列中选出最小的一个数与第一个位置数据交换,在剩下的序列中选出第二小的一个数放在第二个位置,直到倒数第二个数字和倒数第一个数字比较为止。

$arr = array(12,45,23,25,14,9,5,46,56,98,57);
function selectsort($arr){
    $len = count($arr);
    for($i=0;$i<$len-1;$i++){
        $mixm=$i;
        for($j=$i+1;$j<$len;$j++){
            if($arr[$mixm]>$arr[$j]){
                $mixm = $j;
            }
            if($mixm!=$i){
                $tmp=$arr[$mixm];
                $arr[$mixm]=$arr[$i];
                $arr[$i]=$tmp;
            }
        }

    }
    return $arr;
}

3.插入排序

在要排序的一组数组中,假如前面的数已经排序好顺序的,现在要将第n个数插入到已经排序的数组中,使得插入之后任然是有序的排序。如此循环,直到排好为止。

$arr = array(12,45,23,25,14,9,5,46,56,98,57);
function insertsort($arr){
    $len = count($arr);
    for($i=1;$i<$len;$i++){
        $tmp=$arr[$i];
        for($j=$i-1;$j>=0;$j--){
            if($tmp<$arr[$j]){
                $arr[$j+1]=$arr[$j];
                $arr[$j]=$tmp;
            }else{
                break;
            }
        }

    }
    return $arr;
}

4.快速排序

选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排的序列分成两个部分,一部分比基准元素小,另一部分比基准元素大,此时基准元素已经在其排好序列的正确位置,然后使用同样的办法递归的排序划分的两部分。

$arr = array(12,45,23,25,14,9,5,46,56,98,57);
function quicksort($arr){
    $len = count($arr);
    if($len<=1){
        return $arr;
    }
    $base=$arr[0];
    $minArr=array();
    $maxArr=array();
    for($i=1;$i<$len;$i++){
        if($base>$arr[$i]){
            $minArr[]=$arr[$i];
        }else{
            $maxArr[]=$arr[$i];
        }
    }
    $minArr=quicksort($minArr);
    $maxArr=quicksort($maxArr);
    return array_merge($minArr,array($base),$maxArr);
}
时间: 2024-11-04 02:30:41

php常见的一些基础算法的相关文章

机器学习&amp;数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)

http://www.cnblogs.com/tornadomeet/p/3395593.html 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理) 前言: 找工作时(IT行业),除了常见的软件开发以外,机器学习岗位也可以当作是一个选择,不少计算机方向的研究生都会接触这个,如果你的研究方向是机器学习/数据挖掘之类,且又对其非常感兴趣的话,可以考虑考虑该岗位,毕竟在机器智能没达到人类水平之前,机器学习可以作为一种重要手段,而随着科技的不断发展,相信这方面的人才需求也会越来越大.

带你了解Android常见的内存缓存算法

带你了解Android常见的内存缓存算法 本片博客主要简介以下两个问题 介绍一下常见的内存缓存算法 怎样实现这些算法 大家应该对ImageLoader这个框架都不陌生吧,一个很强大的图片加载框架,虽然作者去年的时候已经停止维护了,但里面的许多东西还是值得我们去学习的.本篇博客讲解的内存缓存算法正是基于ImageLoader的实现基础之上的 常见的几种缓存算法 (1)LRU即Least RecentlyUsed,近期最少使用算法. 也就是当内存缓存达到设定的最大值时将内存缓存中近期最少使用的对象移

基础算法(一)

首先必须得说本人对算法研究不深,一些简单的就得想半天,老是这样感觉不太好,遂记录下一些常见的基础算法,避免尴尬.不足之处请各位多多指教. 其次,用vs写C语言程序时可能会出现如下错误:错误 C4996 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online hel

fcc 基础算法题

fcc 基础算法题 fcc Reverse a String 翻转字符串 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串. function reverseString(str) { var arr =str.split(""); //string.split("");以""分割字符串 并返回新的数组 不改变原字符串 arr.reverse(); //反转数组 返回数组的引用 改变原数组 arr = ar

JVM常见的垃圾回收算法

JVM常见的垃圾回收算法 1.标记-清除算法 标记清除算法也是最基础的算法,就如同他的名字一样,标记清除算法的步骤分为两个步骤,首先标记出需要回收的所有对象,然后在完成标记之后统一清除掉所有被标记的对象,之所以说它是最基础的算法,是因为后续算法都是基于此算法,改进其缺点衍生出来的,标记清除算法有两个缺点,标记和清除这两个步骤都会有性能损耗,且效率低,其次是在完成对象的清除后会留下不连续的内存碎片,算法如下图: 2.复制算法 为了提高效率,我们又引入了复制算法,将现有可用的内存大小均分为二,每次只

数据结构常见的八大排序算法(详细整理)

https://www.jianshu.com/p/7d037c332a9d?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-friends 八大排序,三大查找是<数据结构>当中非常基础的知识点,在这里为了复习顺带总结了一下常见的八种排序算法.常见的八大排序算法,他们之间关系如下: 排序算法.png 他们的性能比较: 性能比较.png 下面,利用Python分别将他

基础算法之排序--快速排序

1 /************************************************************************************** 2 * Function : 快速排序 3 * Create Date : 2014/04/21 4 * Author : NTSK13 5 * Email : [email protected] 6 * Copyright : 欢迎大家和我一起交流学习,转载请保持源文件的完整性. 7 * 任何单位和个人不经本人允许不

九章算法 基础算法 强化算法 系统设计 大数据 安卓 leetcode 高清视频

leetcode 直播视频讲座录像 九章算法视频录像,PPT 算法班,算法强化班,Java入门与基础算法班,big data项目实战班,Andriod项目实战班 九章算法下载 九章算法面试 九章算法leetcode 九章算法答案 九章算法mitbbs 九章算法班 九章算法ppt 九章算法录像 九章算法培训 九章算法微博 leetcode 视频 九章算法偷录 算法培训 算法班课程大纲: 1 从strStr谈面试技巧与Coding Style(免费试听) 2 二分搜索与旋转排序数组 Binary S

算法录 之 基础算法

这一篇文章主要说说一些基础算法,这些算是很多其他算法的基石. 主要包括  模拟,暴力,枚举,递归,贪心,分治. 1,模拟: 顾名思义,模拟就是...饿,模拟,有一些题目就是给你一些步骤,然后你写代码一步步去模拟那些步骤就行.这类题目主要属于基础题,但是当然如果需要模拟的步骤足够恶心的话,还是比较麻烦的... 具体模拟的例子在之后的练习中会遇到的,按照题目要求一步步做就行,一般算法难度比较小. 2,暴力: 顾名思义,暴力就是...饿,暴力.比如说题目让从平面上的10个点中取三个点,让他们形成的三角