插入排序(Insertion Sort):每次将一个待排序的记录,按其关键字大小插入到前面已经排序好的子文件中的适当位置,直到全部记录插入完成为止。
//插入排序(一维数组)
function insert_sort($arr)
{
$count = count($arr);
for($i=1; $i<$count; $i++)
{
$tmp = $arr[$i];
$j = $i - 1;
while($arr[$j] > $tmp)
{
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
$j--;
}
}
return $arr;
}
选择排序(Selection Sort):每次从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。
//选择排序(一维数组)
function selection_sort($arr)
{
$count = count($arr);
for($i=0; $i<$count; $i++)
{
$k = $i;
for($j=$i+1; $j<$count; $j++)
{
if($arr[$k] > $arr[$j])
{
$k = $j;
}
if($k != $i)
{
$tmp = $arr[$i];
$arr[$i] = $arr[$k];
$arr[$k] = $tmp;
}
}
}
return $arr;
}
冒泡排序(Bubble Sort):两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序记录位置。
//冒泡排序(一维数组)
//实际效果是:每次循环将数组中最小的值放置到数组的最前段,然后,下一次循环不再循环已放置正确数组值的键,以此类推
function selection_sort($arr)
{
$count = count($arr);
if($count <= 0)
return false;
for($i=0; $i<$count; $i++)
{
for($j=$count-1; $j>$i; $j--)
{
if($arr[$j] < $array[$j-1])
{
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}
}
}
return $arr;
}
快速排序:实质上和冒泡排序一样,是属于交换排序的一种应用。
//快速排序(一维数组)
function quick_sort($arr)
{
$count = count($arr);
if($count <= 1)
return $arr;
$key = $arr[0];
$left_arr = array();
$right_arr = array();
for($i=1; $i<$count; $i++)
{
if($arr[$i] <= $key)
$left_arr[] = $arr[$i];
else
$right_arr[] = $arr[$i];
}
$left_arr = quick_sort($left_arr);
$right_arr = quick_sort($right_arr);
return array_merge($left_arr,array($arr), $right_arr);
}