`

PHP实现各种排序

阅读更多
<?php
/**
 * 各种排序
 * @author zhaojaingwei
 * @since 2011/11/21 16:14
 *
 */

$list = array(3,5,1,2,10,8,15,19,20);

//快排
function fast(&$list, $low, $high){
    if($high - $low > 5){
        while($low < $high){
            $key = excute($list, $low, $high);
            fast($list, $low, $key - 1);
            //fast($list, $key + 1, $high);//普通递归实现
            $low = $key + 1;//尾递归实现
        }
    }else{
        insert($list);
    }
}

//快排执行一次排序
function excute(&$list, $low, $high){
    swap($list, $low, ($low + $high)/2);
    $temp = $list[$low];
    while($low < $high){
        while($low < $high && $list[$high] > $temp){
            $high --;
        }

        $list[$low] = $list[$high];

        while($low < $high && $list[$low] < $temp){
            $low ++;
        }
        
        $list[$high] = $list[$low];
    }

    $list[$low] = $temp;

    return $low;
}

//堆排序
function heap(&$list){
    buildHeap($list);
    for($i = count($list) - 1; $i > 0; $i --){
        swap($list, $i, 0);
        heapfy($list, 0, $i - 1); 
    }
}

//创建堆
function buildHeap(&$list){
    for($i = (count($list) - 2)/2; $i >= 0; $i --){
         heapfy($list, $i, count($list) - 1);  
    }
}

//维护堆
function heapfy(&$list, $low, $high){
    $temp = $list[$low];

    for($i = ($low * 2 + 1); $i <= $high; $i = ($i * 2 + 1)){
        if($i < $high && $list[$i] < $list[$i + 1]){
            $i ++;   
        }

        if($temp < $list[$i]){
            swap($list, $i, $low);
            $low = $i;
        }else{
            break;
        }

    }

    $list[$low] = $temp;
}

//希尔排序
function shell(&$list){
    $a = 0;
    $code = count($list)/3 + 1;
    while($code >= 1){
        for($i = $code; $i < count($list); $i ++){
            $a ++;
            if($list[$i] < $list[$i - $code]){
                $temp = $list[$i];
                $list[$i] = $list[$i - $code];
                $j = $i - 2*$code;
                
                for(; $j >= 0 && $list[$j] > $temp; $j -= $code){
                    $list[$j + $code] = $list[$j];
                    $a ++; 
                }
                $list[$j + $code] = $temp;
            }
        }

        $code = $code/3;
    }

    echo $a;
}

//直接插入排序
function insert(&$list){
    $a = 0;
    for($i = 1; $i < count($list); $i ++){
        $a ++;
        if($list[$i] < $list[$i - 1]){
            $temp = $list[$i];
            $list[$i] = $list[$i - 1];
            
            $j = $i - 2; 
            for(; $list[$j] > $temp; $j --){
                $a ++;
                $list[$j + 1] = $list[$j]; 
            }
            
            $list[$j + 1] = $temp;
        }
    }

    echo $a;
}

//简单选择排序
function select(&$list){
    $a = 0;
    for($i = 0; $i < count($list); $i ++){
        $min = $i;
        $a ++;
        for($j = $i + 1; $j < count($list); $j ++){
            $a ++;
            if($list[$j] < $list[$min]){
                $min = $j;
            }
        }
    
        if($min != $i)
            swap($list, $i, $min);
    }
    echo $a;
}

//冒泡排序
function bubble(&$list){
    $swap = TRUE;
    $a = 0;
    for($i = 0; $i < count($list) && $swap; $i ++){
        $swap = FALSE;
        $a ++;
        for($j = count($list) - 2; $j >= $i; $j --){
            $a ++;
            if($list[$j] > $list[$j + 1]){
                $swap = TRUE;
                swap($list, $j, $j + 1);
            }
        }
    }
    echo $a;
}

//移动或交换函数
function swap(&$list, $i, $j){
    $temp = $list[$i];
    $list[$i] = $list[$j];
    $list[$j] = $temp;
}

?>
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    PHP实现各种排序算法

    以上就是PHP实现的各种排序算法,包括冒泡排序、交换法排序、选择法排序、插入法排序以及快速排序。在实际开发中,根据数据特性和性能需求,选择合适的排序算法至关重要。例如,冒泡排序和插入排序适用于小规模数据...

    php 实现冒泡排序

    用php实现冒泡排序用php实现冒泡排序用php实现冒泡排序用php实现冒泡排序用php实现冒泡排序用php实现冒泡排序

    PHP 各种排序算法实现代码

    php // 功能: PHP实现各种排序算法 // Author: windlike // Datetime: 2007-06-09 // 冒泡排序 function BubbleSort($arr){ $num = count($arr); for($i=1;$i&lt;$num;$i++){ for($j=$num-1;$j&gt;=$i;$j–){ if($arr[$...

    PHP-使用php实现的排序算法-Sorting.zip

    "Sorting.zip"压缩包文件包含了一系列使用PHP实现的排序算法,这对于我们深入理解PHP编程和算法优化具有很高的学习价值。 首先,排序算法是用来对一组数据进行排列的逻辑过程,它可以是升序或降序,常见的排序算法...

    PHP实现商品按销量价格升降序排序

    在JavaScript中,我们可以根据用户的选择动态改变`sort_by`和`sort_order`参数,然后再次发送请求,实现排序的切换。此外,`function`的使用可能涉及到事件监听,如按钮点击事件,来触发排序操作: ```javascript ...

    PHP 排序算法源代码

    本资源提供了PHP实现的五种经典排序算法:冒泡排序、插入排序、选择排序、希尔排序和快速排序。这些算法在数据处理和效率优化上扮演着重要角色。 **冒泡排序(Bubble Sort)** 冒泡排序是最简单的排序算法之一,它...

    php的各种排序方法

    本篇文章将深入探讨几种常见的PHP排序方法,包括冒泡排序、快速排序、插入排序和选择排序,通过理解这些算法的工作原理和具体实现,我们可以更有效地对数组或列表进行排序。 ### 冒泡排序(Bubble Sort) 冒泡排序...

    php各种数组的排序算法

    本文将详细介绍几种常用的排序算法实现,并通过具体的PHP代码示例来帮助理解这些算法的工作原理。 #### 插入排序(Insertion Sort) 插入排序是一种简单直观的排序算法。其工作原理是通过构建有序序列,对于未排序...

    冒泡排序、快速排序、选择排序的php实现

    本话题主要探讨了三种经典的排序算法——冒泡排序、快速排序和选择排序的PHP实现。这三种算法各有优缺点,适用于不同的场景,理解并掌握它们对于提升PHP编程能力十分有益。 首先,我们来看冒泡排序(Bubble Sort)...

    PHP实现常用排序算法的方法

    【PHP实现常用排序算法】 在计算机科学中,排序算法是用于对一组数据进行排序的算法。这篇文章主要关注在PHP中实现几种常见的排序算法,包括快速排序和冒泡排序。 1. **快速排序** 快速排序是一种高效的排序算法...

    php选择排序法实现数组排序实例分析_.docx

    PHP选择排序法实现数组排序实例分析 PHP 选择排序法是常用的数组排序算法之一,它通过比较数组中的元素,选择合适的元素进行交换,直到整个数组排序完成。在 PHP 中实现选择排序法可以使用以下步骤: 1. 首先,...

    php接口实现拖拽排序功能

    本篇将详细讲解如何使用PHP语言实现拖拽排序功能的后端接口。 首先,我们需要了解拖拽排序的基本概念。当用户在前端界面上完成拖拽动作后,后端接口需要根据用户的操作来更新数据项的排序。这一过程涉及到接收前端...

    php插入排序法实现数组排序实例_.docx

    PHP 插入排序法实现数组排序实例 PHP 插入排序法是一种常用的排序算法,它通过将数组分为已排序和未排序两部分,逐步将未排序部分的元素插入到已排序部分中,从而实现数组的排序。下面是 PHP 插入排序法的实现实例...

    给大家介绍的PHP实现四种基础排序算法的运行时间比较

    许多人都说算法是程序的核心,算法的好坏决定了程序的质量。作为一个初级phper,虽然很少接触到算法方面的东西。但是对于基本的排序算法...下面通过本文给大家介绍PHP实现四种基础排序算法的运行时间比较,一起看下吧。

    php-使用php开发的排序算法之BubbleSort-排序算法实现.zip

    总结一下,这份"php-使用php开发的排序算法之BubbleSort-排序算法实现.zip"资料提供了一个用PHP实现冒泡排序的例子,帮助学习者理解如何在实际编程中应用排序算法。通过这个例子,你可以学习到冒泡排序的逻辑以及...

    php冒泡排序和快速排序

    快速排序通常比其他O(n log n)算法更快,因为它的内部循环可以在大部分的架构上更有效率地实现。 1. **基本步骤** - 选择一个元素作为"基准"(pivot)。 - 将所有小于基准的元素移动到基准前面,所有大于基准的...

    php排序算法综合比较

    在PHP编程中,排序算法是处理数据的重要工具,特别是在处理大量数据时,高效排序能显著提升程序性能。这里我们探讨几种常见的排序算法:插入排序、选择排序、冒泡排序和快速排序。 插入排序(Insertion Sort)是一...

    PHP-基于php实现的冒泡排序算法-BubbleSort.zip

    在PHP中实现冒泡排序,我们需要编写一个函数,接收一个数组作为参数,然后利用for循环和while循环来实现排序过程。首先,我们从数组的第一个元素开始,与下一个元素进行比较,如果前一个元素大于后一个元素,则交换...

    jQuery+Ajax实现排序效果

    在"jQuery+Ajax实现排序效果"这个主题中,我们将深入探讨如何利用这两者来实现用户交互性极强的动态排序功能。 首先,jQuery 提供了一种简便的方式来选择DOM元素,例如 `$("#elementID")` 选取ID为`elementID`的...

    使用php实现bubbleSort函数来实现冒泡排序算法

    使用php实现bubbleSort函数来实现冒泡排序算法。在测试部分,我们使用一个数组来测试bubbleSort函数,并输出排序后的结果。

Global site tag (gtag.js) - Google Analytics