1.直接插入算法
原理: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。
//方法一
/**
* @param $arr 需排序的数组
*/
function insert_sort($arr)
{
$count = count($arr);
for($i =0; $i<$count; $i++){
for($j=1; $j<($count-$i); $j++){
if($arr[$j-1] > $arr[$j]){
$temp = $arr[$j-1];
$arr[$j-1] = $arr[$j];
$arr[$j] = $temp;
}
}
}
return $arr;
}
//方法二
function insert_sort($arr){
for ($i = 0; $i < count($arr); $i++){
$j = 1;
while($j < count($arr)){
if( $arr[$j-1]> $arr[$j]){
$temp = $arr[$j-1];
$arr[$j-1] = $arr[$j];
$arr[$j] = $temp;
}
$j++;
}
}
return $arr;
}
2.希尔排序算法
原理: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
23 , 56 , 10 , 5 , 98 , 21 , 4 , 9 , 95 , 15
| -----------------------|
| -------------------- |
| ------------------- |
| ------------------- |
| ------------------- |
21 , 4 , 9 , 5 , 15 , 23 , 56 , 10 , 95 , 98
| -----------|--------------|-------------|
| -----------|------------|
| -----------|--------------|
5 , 4 , 9 , 21 , 10 , 23 , 56 , 15 , 95 , 98
//相当于是直接插入算法
function shell_sort($arr) {
if(!is_array($arr)) return;
$n = count($arr);
for($times=floor($n/2);$times>0;$times=floor($times/2)){
for($i = $times;$i<$n;$i++){
for($j = $times;$j<=($n-$i) && $j>=0;$j+=$times){
if($arr[$j-$times]>$arr[$j]){
$temp = $arr[$j-$times];
$arr[$j-$times] = $arr[$j];
$arr[$j] =$temp ;
}
}
}
}
return $arr;
}
3.直接选择排序算法
原理:
timg.jpg
function select_sort($arr){
for($i = 0; $i < count($arr); $i++){
$key = $arr[$i];
$n = $i;
for($j = $i+1; $j < count($arr); $j++){
if($key > $arr[$j]){
$key = $arr[$j];
$n = $j;
}
}
$arr[$n] = $arr[$i];
$arr[$i] = $key;
}
return $arr;
}
4.堆排序算法
原理:
5.冒泡排序算法
原理:
//冒泡排序
function mopao_sort($arr){
$n= count($arr);
for($i=0;$i<$n;$i++){
for($j=0;$j<$n-1;$j++){
if($arr[$j]>$arr[$j+1]) {
$c = $j;
$temp = $arr[$j+1];
$arr[$j+1] = $arr[$c];
$arr[$c] = $temp;
}else{
$c = $j+1;
}
}
}
return $arr;
}
网友评论