- 1php
- 2 $arr= [3,4,5,1,11,9,27,27,18,20];
- 3
- 4
- 5 functionshellSort(array&$arr,$dt)
- 6 {
- 7 // 跟增量相关,直接排序的改进版,当倒序时,可以极大减少移动的次数。
- 8 $straightInsertFunc=function(array&$arr,$dt){
- 9 $guild= 0;// 监视哨
- 10 array_unshift($arr,$guild);
- 11 $arr=array_values($arr);
- 12 $len=count($arr);
- 13
- 14 for($i= 1 +$dt;$i<$len;$i+=$dt)
- 15 {
- 16 if($arr[$i-$dt] >$arr[$i])
- 17 {
- 18 $arr[0] =$arr[$i];
- 19 $arr[$i] =$arr[$i-$dt];
- 20 for($j=$i- 2 *$dt;$j> 0 &&$arr[$j] >$arr[0];$j-=$dt)
- 21 {
- 22 $arr[$j+$dt] =$arr[$j];
- 23 }
- 24 $arr[$j+$dt] =$arr[0];
- 25 }
- 26 }
- 27 array_shift($arr);
- 28 };
- 29
- 30 if($dt<= 0)
- 31 {
- 32 throw new Exception('Param $dt error!');
- 33 }
- 34
- 35 for($i=$dt;$i>= 1; --$i)
- 36 {
- 37 $straightInsertFunc($arr,$dt);
- 38 }
- 39 }
- 40
- 41shellSort($arr,3);
- 42
- 43 echo implode(',',$arr);
来源: http://www.bubuko.com/infodetail-1965468.html