冒泡等几种排序算法(php)

来源:互联网 发布:2017年9月编程语言排行 编辑:程序博客网 时间:2024/05/05 10:35

1,冒泡排序
第一次循环是排序的次数,也可以理解为已经排好的个数,从数组的开头开始循环,第二次的循环是从尾部开始向上循环,也就是冒泡的过程,遇到排好的就终止( j>i).

public function ranger(){        $argc = array(65,45,94,11,16);        for ($i = 0; $i<count($argc)-1; $i++){            $flag = false;            for ($j = count($argc)-1; $j>$i; $j--){                if($argc[$j]<$argc[$j-1]){                    $temp = $argc[$j-1];                    $argc[$j-1] = $argc[$j];                    $argc[$j] = $temp;                    $flag = true;                }            }            if(!$flag) break;        }        print_r($argc);    }

2,选择排序,第一次循环,从0开始,往后开始循环,假设当前下标最小,记录当前下标值。第二次循环,从第一个循环的下一个开始($i+1,连锁反应是$j<count($argc)不需要减一),往后面的排,两两比较选择第二次循环的最小下标,退出第二次循环之后,判断最小下标是否和之前的下标相等,不等则交换数据。

public function ranger(){        $argc = array(65,45,94,11,16);        for( $i = 0 ;$i<count($argc)-1;$i++){            $min = $i;            for ($j = $i+1;$j<count($argc);$j++){//注意这里不需要减一                if($argc[$j]<$argc[$j-1]){                    $min = $j;                }            }            if($min!=$j){                $temp = $argc[$i];                $argc[$i] = $argc[$min];                $argc[$min] = $temp;            }        }        print_r($argc);    }

3,插入排序,第一次循环同理,第二遍循环,由于插入排序是默认已经钱n-1个已经排好序,所以第二次循环起始点为$j = $i+1,往前进行排序,临界点是$j>0,对里面的数据进行大小判断,并且交换数据。我的理解是插入排序是把下一个数据拉进排序即可。

public function ranger()    {        $argc = array(65, 45, 94, 11, 16);        for($i = 0;$i<count($argc)-1;$i++){            for ($j = $i+1;$j>0;$j--){                if($argc[$j]<$argc[$j-1]){                    $temp = $argc[$j-1];                    $argc[$j-1] = $argc[$j];                    $argc[$j] = $temp;                }            }        }        print_r($argc);    }

4,快速排序

public function ranger($l,$r,$argc)    {        $key = $argc[1];        if($l>=$r) return;        while ($l<$r){            while ($argc[$r]>=$key) $r--;            if ($l<$r){                $argc[$l] = $argc[$r];                $l++;            }            while ($argc[$l]<$key) $l++;            if ($l<$r){                $argc[$r] = $argc[$l];                $r--;            }        }        $argc[$l] = $key;        $this->ranger($l,$r-1,$argc);        $this->ranger($l+1,$r,$argc);    }    public function sel(){        $this->ranger(0,4,$argc = array(65, 45, 94, 11, 16));    }
阅读全文
0 0
原创粉丝点击