php冒泡、选择、插入、快速、归并、sort排序代码实现及性能比较

代码语言:php

所属分类:算法

下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开

<?php
/*
 * php 四种排序算法的时间与内置的sort排序比较
 * 3000个元素,四种算法的排序所用的时间比较
 * 冒泡排序 857.98192024231ms
 * 选择排序 903.74493598938ms
 * 插入排序 296.8270778656ms
 * 快速排序 15.607833862305ms
 * sort排序 0.95200538635254ms
 * 归并排序 14.61386680603ms
 * */


/*
* @param 冒泡排序
* 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
* 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
* */
function BubbleSort($arr) {
    $len = count($arr);
    //设置一个空数组 用来接收冒出来的泡
    //该层循环控制 需要冒泡的轮数
    for ($i = 1; $i < $len; $i++) {
        $flag = false; //本趟排序开始前,交换标志应为假
        //该层循环用来控制每轮 冒出一个数 需要比较的次数
        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;
                $flag = true;
            }
        }
        if (!$flag) return $arr;
    }
}

/*
* @param 选择排序法
* 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。
* 选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)
* */
function selectSort($array) {
    $temp = 0;
    for ($i = 0; $i < count($array) - 1; $i++) {
        $minVal = $array[$i]; //假设$i就是最小值
        $minValIndex = $i;
        for ($j = $i.........完整代码请登录后点击上方下载按钮下载查看

网友评论0