Jadual Kandungan
PHP面试题之算法解析,php试题解析
Rumah pembangunan bahagian belakang tutorial php PHP面试题之算法解析,php试题解析_PHP教程

PHP面试题之算法解析,php试题解析_PHP教程

Jul 12, 2016 am 09:07 AM
Soalan temu bual

PHP面试题之算法解析,php试题解析

面试中经常被问到会什么算法,这里整合一些常见的算法及它们的实现原理.下面的例子都是经过测试可用的,如果有什么问题请告知!!

本人小白,如果有更好的实现方式,敬请赐教,感激不尽!!!!

冒泡排序,快速排序,选择排序,二分法查找,快速查找

<span>/*<span>* 
* 冒泡排序
* 相邻2数比较,小的在前,大的在后
* 数组有几个元素,就要比较几轮 $i
* 每轮需要比较的次数为,数组元素个数-已比较的次数 $j
* @param   array  <span><span>$array 要操作的数组</span></span>
* @return  array  <span><span>$array 返回的数组</span></span>
<span>*/
<span>function bubbleSort<span>(</span><span>$array<span>)
{
        <span>$cnt = <span>count<span>(</span><span>$array<span>);
        <span>for(<span>$i = 0; <span>$i < <span>$cnt ; <span>$i++<span>){
                <span>for(<span>$j = 0 ; <span>$j < (<span>$cnt-<span>$i-1) ; <span>$j++<span>){
                        <span>if(<span>$array[<span>$j] > <span>$array[<span>$j+1<span>]){
                                <span>$temp = <span>$array[<span>$j<span>];
                                <span>$array[<span>$j] = <span>$array[<span>$j+1<span>];
                                <span>$array[<span>$j+1] = <span>$temp<span>;
                        }
                }
        }
        <span>return <span>$array<span>;
}<br /></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span>
Salin selepas log masuk

<span>/*</span><span>*
* 快速排序
* 递归实现
* 获取数组第一个数,循环使后面的数与其比较,
* 比其小的放在一个数组中,比其大的放在一个数组中
* 将2个数组递归调用,直到最终数组元素小于等于1时,没有可以比较的元素
* 通过array_merge函数,将比较的数组按大小顺序合并然后一层一层的return出去,最终实现从小到大排序
* @param array $array 要操作的数组
* @return array $array 返回的数组
</span><span>*/</span>

<span>function</span> quickSort(<span>$array</span><span>)
{
        </span><span>if</span>(<span>count</span>(<span>$array</span>) <= 1 ) <span>return</span> <span>$array</span><span>;
        </span><span>$key</span> = <span>$array</span>[0<span>];
        </span><span>$left_arr</span> = <span>array</span><span>();
        </span><span>$right_arr</span> = <span>array</span><span>();
        </span><span>for</span> (<span>$i</span>=1;<span>$i</span><<span>count</span>(<span>$array</span>);<span>$i</span>++<span>){
                </span><span>if</span>(<span>$array</span>[<span>$i</span>] <= <span>$key</span><span>){
                        </span><span>$left_arr</span>[] = <span>$array</span>[<span>$i</span><span>];
                }</span><span>else</span><span>{
                        </span><span>$right_arr</span>[] = <span>$array</span>[<span>$i</span><span>];
                }
        }

        </span><span>$left_arr</span> = quickSort(<span>$left_arr</span><span>);
        </span><span>$right_arr</span> = quickSort(<span>$right_arr</span><span>);
        </span><span>return</span> <span>array_merge</span>(<span>$left_arr</span>,<span>array</span>(<span>$key</span>),<span>$right_arr</span><span>);

}</span>
Salin selepas log masuk

<span>/*</span><span>*
* 选择排序
* 2层循环
* 第一层逐个获取数组的值 $array[$i]
* 第二次遍历整个数组与$array[$i]比较($j=$i+1已经比较的,不再比较,减少比较次数)
* 如果比$array[$i]小,就交换位置
* 这样一轮下来就可以得到数组中最小值
* 以此内推整个外层循环下来就数组从小到大排序了
* @param array $array 要比较的数组
* @return array $array 从小到大排序后的数组
</span><span>*/</span>

<span>function</span> selectSort(<span>$array</span><span>){
        </span><span>$cnt</span> = <span>count</span>(<span>$array</span><span>);
        </span><span>for</span>(<span>$i</span>=0;<span>$i</span><<span>$cnt</span>;<span>$i</span>++<span>){
                </span><span>for</span>(<span>$j</span>=(<span>$i</span>+1);<span>$j</span><<span>$cnt</span>;<span>$j</span>++<span>){
                        </span><span>if</span>(<span>$array</span>[<span>$i</span>]><span>$array</span>[<span>$j</span><span>]){
                                </span><span>$tmp</span> = <span>$array</span>[<span>$i</span><span>];
                                </span><span>$array</span>[<span>$i</span>] = <span>$array</span>[<span>$j</span><span>];
                                </span><span>$array</span>[<span>$j</span>] = <span>$tmp</span><span>;
                        }
                }
        }
        </span><span>return</span> <span>$array</span><span>;
}</span>
Salin selepas log masuk

<span>/*</span><span>*
* 二分法查找一个值在数组中的位置
* @param array $array 操作的数组
* @param void $val 要查找的值
* @return int $mid 返回要查找的值在数组中的索引,如果不存在返回-1
</span><span>*/</span>

<span>function</span> binarySearch(<span>$array</span>,<span>$val</span><span>)
{
        </span><span>$cnt</span> = <span>count</span>(<span>$array</span><span>);
        </span><span>$low</span> = 0<span>;
        </span><span>$high</span> = <span>$cnt</span> - 1<span>;
        </span><span>while</span> (<span>$low</span> <= <span>$high</span><span>){
                </span><span>$mid</span> = <span>intval</span>((<span>$low</span> + <span>$high</span>)/2<span>);
                </span><span>if</span>(<span>$array</span>[<span>$mid</span>] == <span>$val</span><span>){
                        </span><span>return</span> <span>$mid</span><span>;
                }

                </span><span>if</span>(<span>$array[$mid]</span> < <span>$val</span><span>){
                        </span><span>$low</span> = <span>$mid</span> + 1<span>;
                }

                </span><span>if</span>(<span>$array[$mid]</span> > <span>$val</span><span>){
                        </span><span>$high</span> = <span>$mid</span> - 1<span>;
                }
        }

        </span><span>return</span> -1<span>;
}</span>
Salin selepas log masuk

<span>/*</span><span>*
* 顺序查找(最简单,效率低下)
* 通过循环数组查找要的值
* @param array $array 要操作的数组
* @param void $val  要查找的值
* @return int 如果存在,返回该值在数组中的索引,否则返回-1
</span><span>*/</span>

<span>function</span> seqSch(<span>$array</span>,<span>$val</span><span>)
{
        </span><span>for</span>(<span>$i</span>=0;<span>$i</span><<span>count</span>(<span>$array</span>);<span>$i</span>++<span>){
                </span><span>if</span>(<span>$array</span>[<span>$i</span>] == <span>$val</span><span>)
                        </span><span>break</span><span>;
        }

        </span><span>if</span>(<span>$i</span> < <span>count</span>(<span>$array</span><span>)){
                </span><span>return</span> <span>$i</span><span>;
        }</span><span>else</span><span>{
                </span><span>return</span> -1<span>;
        }
}</span>
Salin selepas log masuk

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1059464.htmlTechArticlePHP面试题之算法解析,php试题解析 面试中经常被问到会什么算法,这里整合一些常见的算法及它们的实现原理.下面的例子都是经过测试可用...
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Lima soalan dan jawapan temu bual bahasa Go yang biasa Lima soalan dan jawapan temu bual bahasa Go yang biasa Jun 01, 2023 pm 08:10 PM

Sebagai bahasa pengaturcaraan yang telah menjadi sangat popular sejak beberapa tahun kebelakangan ini, bahasa Go telah menjadi tempat hangat untuk temu duga di banyak syarikat dan perusahaan. Bagi pemula bahasa Go, cara menjawab soalan yang berkaitan semasa proses temu duga adalah soalan yang patut diterokai. Berikut ialah lima soalan dan jawapan temuduga bahasa Go yang biasa untuk rujukan pemula. Sila perkenalkan bagaimana mekanisme pengumpulan sampah bahasa Go berfungsi? Mekanisme pengumpulan sampah bahasa Go adalah berdasarkan algoritma sapu tanda dan algoritma penandaan tiga warna. Apabila ruang memori dalam program Go tidak mencukupi, pengumpul sampah Go

2023年前端React面试题大汇总(收藏) 2023年前端React面试题大汇总(收藏) Aug 04, 2020 pm 05:33 PM

php中文网作为知名编程学习网站,为您整理了一些React面试题,帮助前端开发人员准备和清除React面试障碍。

2023年精选Web前端面试题大全及答案(收藏) 2023年精选Web前端面试题大全及答案(收藏) Apr 08, 2021 am 10:11 AM

本篇文章给大家总结一些值得收藏的精选Web前端面试题(附答案)。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

50 soalan temuduga sudut yang anda mesti kuasai (Koleksi) 50 soalan temuduga sudut yang anda mesti kuasai (Koleksi) Jul 23, 2021 am 10:12 AM

Artikel ini akan berkongsi dengan anda 50 soalan temuduga sudut yang anda mesti kuasai. Ia akan menganalisis 50 soalan temu bual ini daripada tiga bahagian: pemula, pertengahan dan lanjutan, dan membantu anda memahaminya dengan teliti!

Penemuduga: Sejauh manakah anda tahu tentang konkurensi tinggi? saya: emmm... Penemuduga: Sejauh manakah anda tahu tentang konkurensi tinggi? saya: emmm... Jul 26, 2023 pm 04:07 PM

Keselarasan tinggi adalah pengalaman yang hampir setiap pengaturcara mahu miliki. Sebabnya mudah: apabila trafik meningkat, kami akan menghadapi pelbagai masalah teknikal, seperti tamat masa tindak balas antara muka, beban CPU yang meningkat, GC yang kerap, kebuntuan, storan data yang besar, dll. Masalah ini boleh menggalakkan kami dalam peningkatan berterusan dalam kedalaman teknikal.

Perkongsian soalan temuduga frekuensi tinggi Vue pada tahun 2023 (dengan analisis jawapan) Perkongsian soalan temuduga frekuensi tinggi Vue pada tahun 2023 (dengan analisis jawapan) Aug 01, 2022 pm 08:08 PM

Artikel ini meringkaskan untuk anda beberapa soalan temu duga frekuensi tinggi vue terpilih pada tahun 2023 (dengan jawapan) yang patut dikumpul. Ia mempunyai nilai rujukan tertentu Rakan-rakan yang memerlukan boleh merujuk kepadanya.

Lihat soalan temu duga bahagian hadapan ini untuk membantu anda menguasai mata pengetahuan frekuensi tinggi (4) Lihat soalan temu duga bahagian hadapan ini untuk membantu anda menguasai mata pengetahuan frekuensi tinggi (4) Feb 20, 2023 pm 07:19 PM

10 soalan setiap hari Selepas 100 hari, anda akan menguasai semua mata pengetahuan frekuensi tinggi temuduga hadapan. ! ! , semasa membaca artikel itu, saya harap anda tidak melihat jawapan secara langsung, tetapi fikirkan dahulu sama ada anda mengetahuinya, dan jika ya, apakah jawapan anda? Fikirkan tentangnya dan kemudian bandingkan dengan jawapannya Adakah lebih baik, jika anda mempunyai jawapan yang lebih baik daripada saya, sila tinggalkan mesej di kawasan komen dan bincangkan keindahan teknologi bersama-sama.

Ringkaskan beberapa soalan temuduga front-end biasa (dengan jawapan) untuk membantu anda menyatukan pengetahuan anda! Ringkaskan beberapa soalan temuduga front-end biasa (dengan jawapan) untuk membantu anda menyatukan pengetahuan anda! Jul 29, 2022 am 09:49 AM

Tujuan utama penerbitan artikel adalah untuk memantapkan pengetahuan saya dan menjadi lebih mahir Semuanya berdasarkan pemahaman saya sendiri dan maklumat yang saya cari dalam talian, saya harap anda boleh memberi saya nasihat. Di bawah adalah beberapa soalan temuduga biasa yang telah saya rumuskan, saya akan terus mengemas kininya untuk menyelia diri saya.

See all articles