常用排序算法,如 冒泡排序,选择排序,直接插入排序,快速排序。他们的时间复杂度分别为:
冒泡:O(n)-O(n^2)
选择:O(n)
插入:O(n)-O(n^2)
快排:O(nlog(n))-O(n)
下面是代码描述(PHP)
<?php
class SortArray{
//冒泡排序
public function bubbleSort2(&$array) {
$count=count($array);
$flag=true;//标示符
if($count<=0) {
return false;
}
for($i=0;$i<$count&&$flag;$i++) {
for($j=$count-1;$j>$i;$j--) {
$flag=false;
if($array[$j]<$array[$j-1]) {
$tmp=$array[$j];
$array[$j]=$array[$j-1];
$array[$j-1]=$tmp;
$flag=true;
}
}
}
return $array;
}
// 选择排序
public function selectSort(&$array) {
$len=count($array);
for($i=0;$i<$len;$i++) {
$p=$i;
for($j=$i+1;$j<$len;$j++) {
if($array[$j]<$array[$p]) {
$p=$j;
}
}
//
if($p!=$i) {
$tmp=$array[$p];
$array[$p]=$array[$i];
$array[$i]=$tmp;
}
}
return $array;
}
//插入排序
function insert_sort(&$array) {
$len=count($array);
for($i=1;$i<$len;$i++){
$tmp=$array[$i];
for($j=$i-1;$j>=0;$j--){
if($tmp<$array[$j]) {
$array[$j+1]=$array[$j];
}else {
break;
}
}
$array[$j+1]=$tmp;
}
return $array;
}
//快排
function quick_sort(&$array,$start,$end){
$low=$start;
$high=$end;
//
if($low<$high) {
$val=$array[$low];
while($low<$high) {
while($low<$high&&$array[$high]>=$val)
--$high;
$array[$low]=$array[$high];
while($low<$high&&$array[$low]<=$val)
++$low;
$array[$high]=$array[$low];
}
$array[$low]=$val;
//
$this->quick_sort($array,$start,$low-1);
$this->quick_sort($array,$low+1,$end);
}
return $array;
}
}
?>
上面的排序方法,调用时都是用的引用&,这样节省空间。
下面是给出的一个测试用例:
<?php
include "sort.php";
$mysort=new SortArray();
$arr=array(3,1,7,5,9,10,2,8);
//原数据
print_r($arr);
//冒泡排序
$sorted_arr=$mysort->bubbleSort($arr);
print_r($sorted_arr);
//选择排序
$sorted_arr=$mysort->selectSort($arr);
print_r($sorted_arr);
//插入排序
$sorted_arr=$mysort->insert_sort($arr);
print_r($sorted_arr);
//快排
$sorted_arr=$mysort->quick_sort($arr,0,count($arr)-1);
print_r($sorted_arr);
?>