【DAY.8】PHP數據結構與算法_排序_希爾排序

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/phpbook/article/details/53768576
希爾排序:基於插入排序基礎上分治後的排序方法,將數組按照一定間隔分成若干組,分別進行插入排序,最後組合成一個總的分組,再進行一次插入排序,優點在於減少交換次數(不是每次都循環整個數組)。

  1. $arr = array(3,9,4,1,7,10,12,321,8,5,2,6);
  2. /**
  3. * [shellsort 希爾排序]
  4. * @param [type] $array [待排序數組]
  5. * @return [type] array [排序完成後數組]
  6. * 關鍵變量$m(組數,步長),$key(每組元素數量)
  7. */
  8. function shellsort($array){
  9. //初始獲取數組長度$len,初始化$m,下面第次除2分組
  10. $len = $m = count($array);
  11. //最外層循環,每次對數組進行分組,直至只剩一個數組
  12. while($m>=2){
  13. //獲取當前組數
  14. $m = floor($m/2);
  15. //獲取當前組內元素個數
  16. $key = floor($len/$m);
  17. //循環對每組元素進行插入排序
  18. for($i=0;$i<$m;$i++){
  19. //對$i 組進行插入排序,$key個元素,關鍵點步長$m,插入排序不是按1,遞加,而是按照步長$m遞加
  20. for($j=1;$j<$key;$j++){
  21. $temp = $array[$i+$m*$j];
  22. for($k=$j;$k>0;$k--){
  23. if($temp>$array[$i+$m*($k-1)]){
  24. $array[$i+$m*$k] = $array[$i+$m*($k-1)];
  25. }else{
  26. break;
  27. }
  28. }
  29. $array[$i+$m*($k)] = $temp;
  30. }
  31. }
  32. }
  33. return $array;
  34. }
  35. print_r(shellsort($arr));


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章