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));

 

posted @ 2013-10-16 11:56  尹少爷  阅读(473)  评论(0编辑  收藏  举报