摘要:高級排序算法有希爾排序歸并排序快速排序。冒泡排序首先聲明,這是最慢的排序算法之一,但是也是最容易實(shí)現(xiàn)的排序算法。穩(wěn)定性冒泡排序?yàn)橐环N穩(wěn)定排序。快速排序快速排序是出力大數(shù)據(jù)集最快的排序算法之一。
簡介
對計(jì)算機(jī)中存儲(chǔ)的數(shù)據(jù)執(zhí)行的兩種最常見的操作是排序和檢索,也是面試經(jīng)常會(huì)被問到的一個(gè)知識(shí)點(diǎn),本文將整理數(shù)據(jù)排序的基本算法和高級算法。其中基本排序算法有:冒泡排序、選擇排序、插入排序。高級排序算法有:希爾排序、歸并排序、快速排序。
通常排序問題都可以分隔為相同的小規(guī)模問題來解決,即問題的解決都是遞歸的思路。
首先聲明,這是最慢的排序算法之一,但是也是最容易實(shí)現(xiàn)的排序算法。
算法描述:對于一個(gè)數(shù)列,從第一個(gè)元素開始,依次對相鄰元素進(jìn)行兩兩比較,如果第一個(gè)元素大于第二個(gè)元素就交換他們的位置。
穩(wěn)定性:冒泡排序?yàn)橐环N穩(wěn)定排序。
步驟:
1.從第一個(gè)元素開始,比較相鄰的元素,如果第一個(gè)比第二個(gè)大,就交換他們的位置,一次排序可以將大元素沉底。
2.持續(xù)每次對越來越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。
function bubble(list){ for (var i=1; i選擇排序list[j+1]){//如果第一個(gè)元素大于第二個(gè),交換二者的位置 list[j] = list[j] + list[j+1]; list[j+1] = list[j] - list[j+1]; //list[j] list[j] = list[j] - list[j+1]; //list[j+1] } } } return list; }
算法描述:從數(shù)組的開頭開始,將第一個(gè)元素和其他元素進(jìn)行比較。檢查完所有元素后最小的元素將會(huì)被放到數(shù)組的第一個(gè)位置,然后對第二個(gè)元素執(zhí)行相同的操作,最后直到所有的元素排序完畢。
穩(wěn)定性:選擇排序是一種不穩(wěn)定的排序。
function selection(list){ for(var i=0; i插入排序list[j]){ //交換二者的位置 list[i] = list[i]+list[j]; list[j] = list[i]-list[j]; list[i] = list[i]-list[j]; } } } return list; }
算法描述:對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入,直到所有的數(shù)據(jù)排序完畢。
步驟:
1.第一個(gè)元素,認(rèn)為已經(jīng)被排序。
2.下一個(gè)元素,從已排序的的序列中從前向后掃描,一直找到大于或等于它的元素,將此元素插入到那個(gè)元素之前。
3.重復(fù)步驟2.
穩(wěn)定性:插入排序是一個(gè)穩(wěn)定排序。
function insert(list){ for(var i =1; i希爾排序=j; k--){//從j到i-1的元素向后移動(dòng)一位 list[k] = list[k-1]; } list[j] = a; } } } return list; }
希爾排序是在插入排序的基礎(chǔ)上改進(jìn)的。希爾排序是基于插入排序的以下兩點(diǎn)性質(zhì)而提出改進(jìn)方法的:
1、插入排序在對幾乎已經(jīng)排好序的數(shù)據(jù)操作時(shí), 效率高, 即可以達(dá)到線性排序的效率
2、但插入排序一般來說是低效的, 因?yàn)椴迦肱判蛎看沃荒軐?shù)據(jù)移動(dòng)一位
步驟:
1.先取一個(gè)小于n的整數(shù)d1作為第一個(gè)增量,把所有距離為d1的元素放在同一個(gè)分組中,先在各組內(nèi)進(jìn)行直接插入排序;
2.然后取第二個(gè)增量d2
穩(wěn)定性:希爾排序是不穩(wěn)定排序
實(shí)現(xiàn)原理是把一系列排好序的字序列合并成一個(gè)大的完整有序序列。
快速排序快速排序是出力大數(shù)據(jù)集最快的排序算法之一。它是一種分而治之的算法,通過遞歸的方式將數(shù)據(jù)一次分解為包含小元素和包含大元素的不同子序列。然后不斷重復(fù)這個(gè)步驟直到所有數(shù)據(jù)都是有序的。快速排序非常適合大型數(shù)據(jù)集合的排序,對于小數(shù)據(jù)集時(shí)性能反而會(huì)有下降。
步驟:
1.選擇一個(gè)基準(zhǔn)元素,將列表分隔成兩個(gè)子序列;
2.對序列重新排序,將所有小于基準(zhǔn)值的元素放在基準(zhǔn)值前面,所有大于基準(zhǔn)值的元素放在基準(zhǔn)值后面;
3.分別對較小元素的子序列和較大元素的子序列重復(fù)步驟1、2。
穩(wěn)定性:快速排序是不穩(wěn)定排序
function quickSort(list){ if(list.length == 0){ return []; } else{ var lesser = []; //小于基準(zhǔn)值的序列 var greater = []; //大于基準(zhǔn)值的序列 var pivot = list[0]; for(var i=1; i
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/90997.html
摘要:快速排序是不穩(wěn)定的排序算法。瀏覽器的實(shí)現(xiàn)不同有什么影響排序算法不穩(wěn)定有什么影響舉個(gè)例子某市的機(jī)動(dòng)車牌照拍賣系統(tǒng),最終中標(biāo)的規(guī)則為按價(jià)格進(jìn)行倒排序相同價(jià)格則按照競標(biāo)順位即價(jià)格提交時(shí)間進(jìn)行正排序。 本文要解決的問題 1、找出 Array.prototype.sort 使用的什么排序算法 2、用一種直觀的方式展示 Array.prototype.sort 的時(shí)間復(fù)雜度,看看它有多快? 3、...
摘要:代碼實(shí)現(xiàn)六堆排序算法簡介堆排序是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。九計(jì)數(shù)排序算法簡介計(jì)數(shù)排序是一種穩(wěn)定的排序算法。計(jì)數(shù)排序不是比較排序,排序的速度快于任何比較排序算法。 贊助我以寫出更好的文章,give me a cup of coffee? 2017最新最全前端面試題 1、插入排序 1)算法簡介 插入排序(Insertion-Sort)的算法描述是一種簡單直觀的排序算法。它...
摘要:常見的內(nèi)部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數(shù)排序等。插入排序在實(shí)現(xiàn)上,通常采用排序即只需用到的額外空間的排序,因而在從后向前掃描過程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。 常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。用一張圖概括: showImg(https://segm...
摘要:常見的內(nèi)部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數(shù)排序等。插入排序在實(shí)現(xiàn)上,通常采用排序即只需用到的額外空間的排序,因而在從后向前掃描過程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。 常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。用一張圖概括: showImg(https://segm...
摘要:常見的內(nèi)部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數(shù)排序等。插入排序在實(shí)現(xiàn)上,通常采用排序即只需用到的額外空間的排序,因而在從后向前掃描過程中,需要反復(fù)把已排序元素逐步向后挪位,為最新元素提供插入空間。 常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。用一張圖概括: showImg(https://segm...
摘要:強(qiáng)烈推薦上值得前端學(xué)習(xí)的數(shù)據(jù)結(jié)構(gòu)與算法項(xiàng)目,包含圖的演示過程與視頻講解。該倉庫包含了多種基于的算法與數(shù)據(jù)結(jié)構(gòu),提供進(jìn)一步閱讀的解釋和鏈接。數(shù)據(jù)結(jié)構(gòu)和算法必知必會(huì)的個(gè)代碼實(shí)現(xiàn)。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法為王。想學(xué)好前端,先練好內(nèi)功,內(nèi)功不行,就算招式練的再花哨,終究成不了高手;只有內(nèi)功深厚者,前端之路才會(huì)走得...
閱讀 2789·2021-11-24 09:39
閱讀 2548·2021-11-23 09:51
閱讀 1802·2021-11-17 09:33
閱讀 1737·2021-10-22 09:54
閱讀 1871·2021-08-16 11:00
閱讀 3421·2019-08-30 15:53
閱讀 1733·2019-08-30 13:19
閱讀 2902·2019-08-30 12:49