merge sort and quick sort 自己去理解吧

 1 <?php

 2 

 3 $digits=array(27,45,85,12,36,9,54,56);

 4 function quickSort($arr){

 5   $len=count($arr);

 6   if($len<=1){

 7     return $arr;

 8   }

 9   $midKey=$arr[0];

10   $lefts=array();

11   $rights=array();

12   for($i=1;$i<$len;$i++){

13     if($arr[$i]<$midKey){

14         $lefts[]=$arr[$i];

15     }else{

16         $rights[]=$arr[$i];

17     }

18   }

19   $lefts=quickSort($lefts);

20   $rights=quickSort($rights);

21   return  array_merge($lefts,array($midKey),$rights);

22 }

23 echo '<pre>';

24 //print_r(quickSort($digits));

25 

26 function insertSort($digits,$inkey){

27     $digits=quickSort($digits);

28     $count=count($digits)-1;

29     for($j=$count;$j>=0;$j--){

30         $key=$digits[$j];

31         if($inkey<=$digits[$j]&&$inkey>=$digits[$j-1]){

32           $digits[$j]=$inkey;

33           break;

34         }

35         $digits[$j+1]=$key;

36     }

37   return $digits;

38 }

39 $inkey=24;

40 //print_r(insertSort($digits,$inkey));

41 

42 function mergeSort($digits){

43   if(count($digits)<=1){

44     return $digits;

45   }

46   $mid=count($digits)/2-1;

47   $count=count($digits)-1;

48   $right=array();

49   $left=array();

50   for($i=0;$i<=$count;$i++){

51     if($i<=$mid){

52       $left[]=$digits[$i];

53     }else{

54       $right[]=$digits[$i];

55     }

56   }

57   $left=mergeSort($left);

58   $right=mergeSort($right);

59   $result=merge($left,$right);

60   return $result;

61 }

62 function merge($left,$right){

63   $llen=count($left);

64   $rlen=count($right);

65   $count=$llen+$rlen-1;

66   $i=0;$j=0;

67   while(count($left)>0||count($right)>0){

68     if(count($left)>0&&count($right)>0){

69         if($left[$i]<=$right[$j]){

70           $result[]=$left[$i];

71           array_shift($left);

72         }else{

73           $result[]=$right[$j];

74           array_shift($right);

75         }

76     }else if(count($right)==0){

77         $result[]=$left[$i];

78         array_shift($left);

79     }else if(count($left)==0){

80        $result[]=$right[$j];

81         array_shift($right);

82     }

83   }

84    return $result;

85 }

86 print_r(mergeSort($digits));

 

你可能感兴趣的:(merge)