前端面試題-Web前端排序算法的總結(jié)-創(chuàng)新互聯(lián)

  不知道你們對Web前端了解多少呢?如果想要更好的通過前端面試,你一定要懂以下內(nèi)容,一起跟創(chuàng)新互聯(lián)小編來看看吧。

創(chuàng)新互聯(lián)建站主營資陽網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,手機(jī)APP定制開發(fā),資陽h5微信小程序定制開發(fā)搭建,資陽網(wǎng)站營銷推廣歡迎資陽等地區(qū)企業(yè)咨詢

  Web前端面試排序算法總結(jié),前端工程師面試過程中會涉及排序算法的考察,經(jīng)常用到的排序算法有冒泡排序、選擇排序、插入排序、希爾排序、歸并排序、快速排序、堆排序、計數(shù)排序、桶排序、基數(shù)排序。

前端面試題-Web前端排序算法的總結(jié)
  一、冒泡排序
  冒泡排序(Bubble Sort)也是一種簡單直觀的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個算法的名字由來是因為越小的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
  作為最簡單的排序算法之一,冒泡排序給我的感覺就像 Abandon 在單詞書里出現(xiàn)的感覺一樣,每次都在第一頁第一位,所以最熟悉。冒泡排序還有一種優(yōu)化算法,就是立一個 flag,當(dāng)在一趟序列遍歷中元素沒有發(fā)生交換,則證明該序列已經(jīng)有序。但這種改進(jìn)對于提升性能來說并沒有什么太大作用。
  二、選擇排序
  選擇排序是一種簡單直觀的排序算法,無論什么數(shù)據(jù)進(jìn)去都是 O(n?) 的時間復(fù)雜度。所以用到它的時候,數(shù)據(jù)規(guī)模越小越好。唯一的好處可能就是不占用額外的內(nèi)存空間了吧。
  1. 算法步驟
  1.首先在未排序序列中找到最?。ù螅┰?,存放到排序序列的起始位置
  2.再從剩余未排序元素中繼續(xù)尋找最小(大)元素,然后放到已排序序列的末尾。
  3.重復(fù)第二步,直到所有元素均排序完畢。
  三、插入排序
  插入排序的代碼實(shí)現(xiàn)雖然沒有冒泡排序和選擇排序那么簡單粗暴,但它的原理應(yīng)該是最容易理解的了,因為只要打過撲克牌的人都應(yīng)該能夠秒懂。
  插入排序是一種最簡單直觀的排序算法,它的工作原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。
  插入排序和冒泡排序一樣,也有一種優(yōu)化算法,叫做拆半插入。
  1. 算法步驟
  1.將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最后一個元素當(dāng)成是未排序序列。
  2.從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當(dāng)位置。
  四、希爾排序
  希爾排序,也稱遞減增量排序算法,是插入排序的一種更高效的改進(jìn)版本。但希爾排序是非穩(wěn)定排序算法。
  希爾排序是基于插入排序的以下兩點(diǎn)性質(zhì)而提出改進(jìn)方法的:
  插入排序在對幾乎已經(jīng)排好序的數(shù)據(jù)操作時,效率高,即可以達(dá)到線性排序的效率;
  但插入排序一般來說是低效的,因為插入排序每次只能將數(shù)據(jù)移動一位;
  希爾排序的基本思想是:先將整個待排序的記錄序列分割成為若干子序列分別進(jìn)行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進(jìn)行依次直接插入排序。
  1. 算法步驟
  1.選擇一個增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;
  2.按增量序列個數(shù) k,對序列進(jìn)行 k 趟排序;
  3.每趟排序,根據(jù)對應(yīng)的增量 ti,將待排序列分割成若干長度為 m 的子序列,分別對各子表進(jìn)行直接插入排序。僅增量因子為 1 時,整個序列作為一個表來處理,表長度即為整個序列的長度。
  五、歸并排序
  歸并排序(Merge sort)是建立在歸并操作上的一種有效的排序算法。該算法是采用分治法(Divide and Conquer)的一個非常典型的應(yīng)用。
  作為一種典型的分而治之思想的算法應(yīng)用,歸并排序的實(shí)現(xiàn)由兩種方法:
  自上而下的遞歸(所有遞歸的方法都可以用迭代重寫,所以就有了第 2 種方法);
  自下而上的迭代;
  和選擇排序一樣,歸并排序的性能不受輸入數(shù)據(jù)的影響,但表現(xiàn)比選擇排序好的多,因為始終都是 O(nlogn) 的時間復(fù)雜度。代價是需要額外的內(nèi)存空間。
  2. 算法步驟
  1.申請空間,使其大小為兩個已經(jīng)排序序列之和,該空間用來存放合并后的序列;
  2.設(shè)定兩個指針,最初位置分別為兩個已經(jīng)排序序列的起始位置;
  3.比較兩個指針?biāo)赶虻脑?,選擇相對小的元素放入到合并空間,并移動指針到下一位置;
  4.重復(fù)步驟 3 直到某一指針達(dá)到序列尾;
  5.將另一序列剩下的所有元素直接復(fù)制到合并序列尾。
  六、快速排序
  快速排序是由東尼·霍爾所發(fā)展的一種排序算法。在平均狀況下,排序 n 個項目要 Ο(nlogn) 次比較。在最壞狀況下則需要 Ο(n2) 次比較,但這種狀況并不常見。事實(shí)上,快速排序通常明顯比其他 Ο(nlogn) 算法更快,因為它的內(nèi)部循環(huán)(inner loop)可以在大部分的架構(gòu)上很有效率地被實(shí)現(xiàn)出來。
  快速排序使用分治法(Divide and conquer)策略來把一個串行(list)分為兩個子串行(sub-lists)。
  快速排序又是一種分而治之思想在排序算法上的典型應(yīng)用。本質(zhì)上來看,快速排序應(yīng)該算是在冒泡排序基礎(chǔ)上的遞歸分治法。
  快速排序的名字起的是簡單粗暴,因為一聽到這個名字你就知道它存在的意義,就是快,而且效率高!它是處理大數(shù)據(jù)最快的排序算法之一了。雖然 Worst Case 的時間復(fù)雜度達(dá)到了 O(n?),但是人家就是優(yōu)秀,在大多數(shù)情況下都比平均時間復(fù)雜度為 O(n logn) 的排序算法表現(xiàn)要更好。
  1. 算法步驟
  1.從數(shù)列中挑出一個元素,稱為 “基準(zhǔn)”(pivot);
  2.重新排序數(shù)列,所有元素比基準(zhǔn)值小的擺放在基準(zhǔn)前面,所有元素比基準(zhǔn)值大的擺在基準(zhǔn)的后面(相同的數(shù)可以到任一邊)。在這個分區(qū)退出之后,該基準(zhǔn)就處于數(shù)列的中間位置。這個稱為分區(qū)(partition)操作;
  3.遞歸地(recursive)把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元素的子數(shù)列排序;
  遞歸的最底部情形,是數(shù)列的大小是零或一,也就是永遠(yuǎn)都已經(jīng)被排序好了。雖然一直遞歸下去,但是這個算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去。

前端面試題-Web前端排序算法的總結(jié)
  七、堆排序
  堆排序(Heapsort)是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計的一種排序算法。堆積是一個近似完全二叉樹的結(jié)構(gòu),并同時滿足堆積的性質(zhì):即子結(jié)點(diǎn)的鍵值或索引總是小于(或者大于)它的父節(jié)點(diǎn)。堆排序可以說是一種利用堆的概念來排序的選擇排序。分為兩種方法:
  1.大頂堆:每個節(jié)點(diǎn)的值都大于或等于其子節(jié)點(diǎn)的值,在堆排序算法中用于升序排列;
  2.小頂堆:每個節(jié)點(diǎn)的值都小于或等于其子節(jié)點(diǎn)的值,在堆排序算法中用于降序排列;
  堆排序的平均時間復(fù)雜度為 Ο(nlogn)。
  1. 算法步驟
  1.創(chuàng)建一個堆 H[0……n-1];
  2.把堆首(大值)和堆尾互換;
  3.把堆的尺寸縮小 1,并調(diào)用 shift_down(0),目的是把新的數(shù)組頂端數(shù)據(jù)調(diào)整到相應(yīng)位置;
  4.重復(fù)步驟 2,直到堆的尺寸為 1。
  八、計數(shù)排序
  計數(shù)排序的核心在于將輸入的數(shù)據(jù)值轉(zhuǎn)化為鍵存儲在額外開辟的數(shù)組空間中。作為一種線性時間復(fù)雜度的排序,計數(shù)排序要求輸入的數(shù)據(jù)必須是有確定范圍的整數(shù)。
  九、桶排序
  桶排序是計數(shù)排序的升級版。它利用了函數(shù)的映射關(guān)系,高效與否的關(guān)鍵就在于這個映射函數(shù)的確定。為了使桶排序更加高效,我們需要做到這兩點(diǎn):
  1.在額外空間充足的情況下,盡量增大桶的數(shù)量
  2.使用的映射函數(shù)能夠?qū)⑤斎氲?N 個數(shù)據(jù)均勻的分配到 K 個桶中
  同時,對于桶中元素的排序,選擇何種比較排序算法對于性能的影響至關(guān)重要。
  十、基數(shù)排序
  基數(shù)排序是一種非比較型整數(shù)排序算法,其原理是將整數(shù)按位數(shù)切割成不同的數(shù)字,然后按每個位數(shù)分別比較。由于整數(shù)也可以表達(dá)字符串(比如名字或日期)和特定格式的浮點(diǎn)數(shù),所以基數(shù)排序也不是只能使用于整數(shù)。
  1. 基數(shù)排序 vs 計數(shù)排序 vs 桶排序
  基數(shù)排序有兩種方法:
  這三種排序算法都利用了桶的概念,但對桶的使用方法上有明顯差異:
  基數(shù)排序:根據(jù)鍵值的每位數(shù)字來分配桶;
  計數(shù)排序:每個桶只存儲單一鍵值;
  桶排序:每個桶存儲一定范圍的數(shù)值;

  關(guān)于前端面試題-Web前端排序算法的總結(jié)就分享到這里了,當(dāng)然并不止以上和大家分析的辦法,不過小編可以保證其準(zhǔn)確性是絕對沒問題的。希望以上內(nèi)容可以對大家有一定的參考價值,可以學(xué)以致用。如果喜歡本篇文章,不妨把它分享出去讓更多的人看到。

分享文章:前端面試題-Web前端排序算法的總結(jié)-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://muchs.cn/article2/cddsic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計、網(wǎng)站改版、營銷型網(wǎng)站建設(shè)、ChatGPT、標(biāo)簽優(yōu)化、網(wǎng)站設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站網(wǎng)頁設(shè)計