美文网首页
希尔排序

希尔排序

作者: X1_blog | 来源:发表于2020-05-07 18:51 被阅读0次
/*希尔排序*/
$arr = [14,18,19,37,23,40,29,30,11,7,2,1,8,6,3,5,4] ;
$sorted_arr = shellSort($arr);
myPrint($sorted_arr);    // 1 2 3 4 5 6 7 8 11 14 18 19 23 29 30 37 40  [Finished in 0.1s]
 
function shellSort($arr){
    $count = count($arr);
    $gap_list = [] ;
    $gap = floor($count/2);
    while($gap>=1){
        $gap_list [] = $gap;
        $gap = floor($gap/2);
    }   // 获得间隔序列
    

    foreach ($gap_list as $gap) {
        $subUnsortArr = getGapArr($arr,$gap) ;  // 跳过间隔所构成子序列
        $subsortArr = insertSort($subUnsortArr);    // 插入排序法排序序列
        $arr = setGapArr($arr,$subsortArr,$gap);    // 将有序子序列重新插入回原数组
    }
    return $arr;
}


function getGapArr($arr,$gap){
    $gapArr= [];$i=0;
    while($i<count($arr)){
        $gapArr[] = $arr[$i];
        $i+=$gap;
    }
    return $gapArr;
}

function setGapArr($arr,$sortedArr,$gap){
    $i=0;
    while($i<count($arr)){
        $arr[$i] = array_shift($sortedArr);
        $i+=$gap;
    }
    return $arr;
}



function insertSort($arr){
    for ($i=1; $i <count($arr) ; $i++) { 
        $tmp = $arr[$i];
        for ($j=$i; $j>0 ; $j--) {
            if($tmp<$arr[$j-1]){
                $arr[$j] = $arr[$j-1] ;
            }else{
                break;
            }
        }
        $arr[$j] = $tmp;
    }
    return $arr;
}

相关文章

  • 排序算法(二)之希尔排序

    图解排序算法(二)之希尔排序 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也...

  • 07-希尔排序(Shell Sort)

    希尔排序(Shell Sort) 希尔排序是唐纳德·希尔(Donald Shell)在0959年提出的。希尔排序与...

  • 排序-希尔排序(分治)

    希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

  • swift经典算法-希尔排序

    希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

  • 排序算法④——希尔排序

    希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序...

  • 排序算法-希尔排序(Java实现)

    希尔排序 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是...

  • 说说算法那些事-希尔排序

    希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,希尔排序法又称...

  • 希尔排序学习

    希尔排序希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基...

  • 排序算法(四) 希尔排序(插入排序的进化)

    参考Java排序算法(四):希尔排序常见排序算法 - 希尔排序 (Shell Sort) 希尔排序算法是按其设计者...

  • 编程马拉松 Day04 希尔排序、归并排序、快速排序

    本文将介绍三个高级排序算法 希尔排序 归并排序 快速排序 希尔排序 希尔排序(Shell's Sort)的名称源于...

网友评论

      本文标题:希尔排序

      本文链接:https://www.haomeiwen.com/subject/gxftghtx.html