`
yl.fighter
  • 浏览: 258174 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

PHP 常见算法【冒泡排序, 快速排序, 插入排序, 选择排序, 二分法查找, ..】

阅读更多
// 冒泡排序
function bubblesort($arr) {
    for($i=0,$j=count($arr); $i<$j; $i++) {
        for($k=$j-1; $k>$i; $k--) {
            if ($arr[$k] < $arr[$k-1]) list($arr[$k-1], $arr[$k]) = array($arr[$k], $arr[$k-1]);
        } 
    }
    return $arr;
}

$arr = array(1,4,14,3,56,23,435,2,234,2,33,23,123);
print_r(bubblesort($arr));
// 快速排序
function quicksort($arr) {
    if(($count = count($arr)) <= 1 ) return $arr;
    $base = $arr[0];
    $left = $right = array();
    for($i=1; $i<$count; $i++) {
        if($arr[$i] <= $base) $left[] = $arr[$i];
        else $right[] = $arr[$i];
    }
    $left = quicksort($left);
    $right = quicksort($right);
    return array_merge($left, array($base), $right);
}

echo join(',', quicksort(array(1,3,23,5,234,65,6))); 
// 插入排序
function insertsort($arr) {
    for($i=1, $j=count($arr); $i<$j; $i++) {
        $k = $i;
        while($k > 0 && $arr[$k-1] > $arr[$k]) {
            list($arr[$k], $arr[$k-1]) = array($arr[$k-1], $arr[$k]);
            $k--;
        }
    }
    return $arr;
}

$array=array(10,8,7,5,1,2,3,4);
print_r(insertsort($array));

 

// 选择排序, (非递归)
function selectsort($arr) {
    for($i=0, $j=count($arr); $i<=$j; $i++) {
        $min = $i;
        $temp = $arr[$i];
        for($k=$i+1; $k<$j; $k++) {
            if($temp > $arr[$k]) {
                $min = $k;
                $temp = $arr[$k];
            }
        } 
        if($min != $i) list($arr[$min], $arr[$i]) = array($arr[$i], $arr[$min]);
    }
    return $arr;
}

$arr = array(9,3,11,23,90,99,12,34,22,87,32);
print_r(selectsort($arr));

 

// 选择排序(递归实现)
function selectsort2($arr, $start = 0) {
    if(($count = count($arr)) == $start + 1) return $arr;
    $new = array();
    $min = $arr[$start];
    $min_index = $start;
    for($i=$start+1; $i<$count-1; $i++) {
        if($arr[$i] < $min) {
            $min = $arr[$i];
            $min_index = $i;
        }
    }
    if($arr[$start] != $min) list($arr[$start], $arr[$min_index]) = array($arr[$min_index], $arr[$start]);
    return selectsort($arr, $start + 1);
}
$arr = array(9,3,11,23,90,99,12,34,22,87,32);
print_r(selectsort($arr));
 

 

 

<?php
// 二分法查找
function binarysearch($arr, $value, $start = 0, $end = NULL) {
    if($end == NULL) $end = count($arr) - 1;
    $index = floor(($start+$end)/2);
    $base = $arr[$index];
    if($value < $base) return binarysearch($arr, $value, $start, $index-1);
    else if($value > $base) return binarysearch($arr, $value, $index+1, $end);
    else return $index;
}

$arr = array(1, 3, 5, 6, 7, 8, 10, 12, 14, 16, 18, 20);
$value = 8;
echo binarysearch($arr, $value);
 

待续...

分享到:
评论

相关推荐

    冒泡 快速排序 选择排序 二分法 插入 快速选择

    以下将详细讲解标题和描述中提到的几种排序算法:冒泡排序、快速排序、选择排序、二分法、插入排序以及快速选择排序。 1. **冒泡排序**:冒泡排序是一种简单的比较排序算法。它通过重复遍历待排序的数列,一次比较...

    实现直接插入排序,二分法插入排序、希尔排序,冒泡排序,快速排序,直接选择排序的算法.pdf

    在本文中,我们将深入探讨五种常见的排序算法:直接插入排序、二分法插入排序、希尔排序、冒泡排序和快速排序,并对其实现进行详细的解释。 直接插入排序 直接插入排序是一种简单的排序算法,它的实现思路是:从第...

    冒泡排序、快速排序和二分法查找的分析 Java

    ### 冒泡排序、快速排序和二分法查找的分析:Java实现 #### 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列...

    数据结构排序算法汇总包-直接插入排序 折半插入排序 2—路插入排序 表插入排序 希尔排序 起泡排序 快速排序 简单选择排序 树形选择排序 堆排序 归并排序链式基数排序

    实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...

    数据结构快速排序二分法查找

    "数据结构快速排序二分法查找" 快速排序和二分法查找是数据结构中两个非常重要的概念,它们都是解决实际问题的重要工具。在本文中,我们将详细介绍快速排序和二分法查找的原理、实现和应用。 快速排序 快速排序...

    冒泡排序以及二分法查询

    冒泡排序以及二分法查询冒泡排序以及二分法查询冒泡排序以及二分法查询冒泡排序以及二分法查询冒泡排序以及二分法查询

    C# 简单的冒泡、快速排序及二分法查找.zip

    本资源“C# 简单的冒泡、快速排序及二分法查找.zip”显然关注的是数据排序和查找算法的实现,这些都是计算机科学和编程的基础知识。 首先,我们来探讨冒泡排序(Bubble Sort)。这是一种简单的交换排序方法,适用于...

    c++ 二分法查找 二分法排序 混合排序 希尔排序 插入排序

    binary sort,二分法查找,binary search, 二分法排序,merge sort 混合排序,shell sort 希尔排序,insertion sort 插入排序。数据结构 data structure

    二分法直接插入排序算法

    直接插入排序是一种基础的排序算法,它的工作原理是将未排序的元素逐个与已排序的部分进行...在编程实践中,根据具体场景选择合适的排序算法是非常重要的,二分法直接插入排序提供了一种在特定条件下提高效率的选择。

    java 冒泡算法和插入法排序,二分法查找

    本文将深入探讨Java中的冒泡排序、插入排序以及二分法查找这三种基础算法,这些都是面试时经常会被问到的技术点。 首先,让我们从冒泡排序开始。冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的数列,一次...

    Java常用高效8大排序算法与二分法查找

    本文将深入探讨Java中常用的八大排序算法以及二分法查找,旨在帮助算法爱好者和开发人员提升解决问题的能力。 首先,让我们来看Java中的八大排序算法: 1. 冒泡排序:这是一种简单的排序方法,通过重复遍历待排序...

    Java常用排序算法&程序员必须掌握的8大排序算法+二分法查找

    本资料包聚焦于"Java常用排序算法"和"程序员必须掌握的8大排序算法",并深入探讨了"二分法查找"这一高效搜索技术。 首先,我们来看八大排序算法。这些算法包括: 1. **冒泡排序**:最简单的排序方法,通过不断交换...

    用javascript实现的十大排序算法详解

    快速排序是基于分治策略的高效排序算法。选取一个“基准”元素,然后将数组分为两部分,一部分所有元素小于基准,另一部分所有元素大于基准。递归地对这两部分进行快速排序,最后达到整个数组有序。 5. 归并排序...

    二分法排序和查找(C#)

    二分插入排序是一种基于二分查找的改进排序算法,它在插入新元素时使用二分查找来确定元素应插入的位置,从而减少比较次数。具体步骤如下: 1. 对于数组中的每个元素,假设为待插入元素。 2. 使用二分查找找到待...

    二分法排序算法 C语言实现

    二分法搜索算法是一种高效的查找算法,尤其适用于大数据量且数据已排序的情况。在C语言中实现二分查找,需要注意正确处理数组的创建、初始化以及查找过程中的边界条件。本例通过具体的代码实现了这一算法,可供学习...

    算法之排序专题 二分法排序等等

    【算法之排序专题】本文主要探讨了排序算法,包括简单的排序算法和高级排序算法,特别提到了快速排序和二分法排序。排序算法在处理大量数据时扮演着关键角色,因此对算法效率的要求非常高。衡量算法效率的主要指标是...

    查找与排序算法的实现和应用

    常见的排序算法有插入排序、快速排序、选择堆积排序法等。 插入排序算法是一种简单的排序算法,适用于小规模的数据结构。该算法将数据结构分成已排序部分和未排序部分,并将未排序部分的元素插入到已排序部分中。...

    数据结构排序.rar

    这里我们主要讨论的是在数据结构中的几种常见排序方法,包括插入排序、冒泡排序、快速排序以及与二分法相关的排序策略。 1. 插入排序: 插入排序是一种简单直观的排序算法,它的工作原理类似于打扑克牌。初始时,...

    Java常用排序算法&程序员必须掌握的8大排序算法+二分法查找(同步到博客).doc

    【Java 常用排序算法】排序是编程中常见的任务之一,主要分为四类:插入排序、交换排序、选择排序和归并排序。此外,还有分配排序中的基数排序。以下是对这些排序算法的详细说明: 1. **直接插入排序**: 直接插入...

    七种常见的VB排序算法示例程序.rar

    VB程序员可以根据实际需求选择合适的算法,例如,对于小规模数据,可以选择简单的插入排序或冒泡排序;对于大规模数据,快速排序、归并排序或堆排序可能是更好的选择。理解并熟练掌握这些排序算法,将有助于提升编程...

Global site tag (gtag.js) - Google Analytics