|
1 |
| -算法可以说是大厂的必考题,对于算法,一定要理解其中的精髓、原理。 |
| 1 | +> 本书的 GitHub 地址:https://github.com/todayqq/PHPerInterviewGuide |
2 | 2 |
|
3 |
| -**讲真,大多面试官都会问实现原理和实现的具体过程,一定要知其所以然。** |
| 3 | +算法可以说是大厂的必考题,对于算法,一定要理解其中的精髓、原理。 |
4 | 4 |
|
5 | 5 | - 冒泡排序
|
6 | 6 |
|
@@ -35,33 +35,37 @@ function bubble_sort($arr)
|
35 | 35 |
|
36 | 36 | 实现思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行快速排序,整个排序过程可以递归进行,以达到整个序列有序的目的。
|
37 | 37 |
|
38 |
| -简单来说就是:找到当前数组中的任意一个元素(一般选择第一个元素),作为标的,新建两个空数组,遍历整个数组元素,如果遍历到的元素比当前的元素要小,那么就放到左边的数组,否则放到右面的数组,然后再对新数组进行同样的操作。 |
| 38 | +简单来说就是:找到当前数组中的任意一个元素(一般选择第一个元素),作为标的,新建两个空数组,遍历这个数组元素,如果数组的值比标的小,那么就放到左边的数组,否则放到右面的数组,然后再对这两个数组进行同样的操作。 |
39 | 39 |
|
40 | 40 | ```
|
41 |
| -function quick_sort($arr) { |
42 |
| - $count = count($arr); |
43 |
| - if(1 >= $count) { |
44 |
| - return arr; |
45 |
| - } |
46 |
| -
|
47 |
| - $base_num = $arr[0]; //选择标的 |
48 |
| - $left_array = array();//小于标的 |
49 |
| - $right_array = array();//大于标的 |
50 |
| -
|
51 |
| - for($i = 1; $i < $count; $i++) { |
52 |
| - if($base_num > $arr[$i]) { |
53 |
| - $left_array[] = $arr[$i]; |
54 |
| - } else { |
55 |
| - $right_array[] = $arr[$i]; |
56 |
| - } |
57 |
| - } |
58 |
| - //再分别对左边和右边的数组,进行相同的排序处理方式 |
59 |
| - $left_array = quick_sort($left_array); |
60 |
| - $right_array = quick_sort($right_array); |
61 |
| -
|
62 |
| - //最终合并 |
63 |
| - return array_merge($left_array, array($base_num), $right_array); |
| 41 | +function quickSort($arr) |
| 42 | +{ |
| 43 | + if (!isset($arr[1])) { |
| 44 | + return $arr; |
| 45 | + } |
| 46 | + |
| 47 | + // 选择标的 |
| 48 | + $baseNum = $arr[0]; |
| 49 | + $leftArr = array(); |
| 50 | + $rightArr = array(); |
| 51 | +
|
| 52 | + foreach ($arr as $v) { |
| 53 | + if ($baseNum > $v) { |
| 54 | + $leftArr[] = $v; |
| 55 | + } |
| 56 | + if ($baseNum < $v) { |
| 57 | + $rightArr[] = $v; |
| 58 | + } |
| 59 | + } |
| 60 | + |
| 61 | + $leftArr = quickSort($leftArr); |
| 62 | + $leftArr[] = $baseNum; |
| 63 | +
|
| 64 | + $rightArr = quickSort($rightArr); |
| 65 | +
|
| 66 | + return array_merge($leftArr, $rightArr); |
64 | 67 | }
|
| 68 | +
|
65 | 69 | ```
|
66 | 70 |
|
67 | 71 | - 二分查找(折半查找)
|
@@ -93,8 +97,6 @@ function binSearch($arr, $target){
|
93 | 97 | }
|
94 | 98 | ```
|
95 | 99 |
|
96 |
| -算法就简单罗列这几种,了解更多就看看扩展阅读吧。 |
97 |
| - |
98 | 100 | ### 扩展阅读
|
99 | 101 |
|
100 | 102 | - [PHP 冒泡排序](https://www.cnblogs.com/wgq123/p/6529450.html)
|
|
0 commit comments