javascript基本常用排序算法解析
備注:內(nèi)容大部分從網(wǎng)上復(fù)制,代碼為自己手寫。僅做知識(shí)的溫故知新,并非原創(chuàng)。
1.冒泡排序(Bubble Sort)
(1)算法描述
冒泡排序是一種簡單的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個(gè)元素,如果它們的順序錯(cuò)誤就把它們交換過來。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
(2)算法描述和實(shí)現(xiàn)
具體算法描述如下:
<1>.比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換它們兩個(gè);<2>.對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì),這樣在最后的元素應(yīng)該會(huì)是最大的數(shù);<3>.針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè);<4>.重復(fù)步驟1~3,直到排序完成。
JavaScript代碼實(shí)現(xiàn):
改進(jìn)冒泡排序:設(shè)置一標(biāo)志性變量pos,用于記錄每趟排序中最后一次進(jìn)行交換的位置。由于pos位置之后的記錄均已交換到位,故在進(jìn)行下一趟排序時(shí)只要掃描到pos位置即可。
改進(jìn)后算法如下:
傳統(tǒng)冒泡排序中每一趟排序操作只能找到一個(gè)最大值或最小值,我們考慮利用在每趟排序中進(jìn)行正向和反向兩遍冒泡的方法一次可以得到兩個(gè)最終值(最大者和最小者) , 從而使排序趟數(shù)幾乎減少了一半。
改進(jìn)后的算法為:
三種算法的運(yùn)行時(shí)間為:
由運(yùn)行結(jié)果可以看出時(shí)間復(fù)雜度更低,耗時(shí)更短了。大家可以親自嘗試下,運(yùn)行的時(shí)候最好將三種算法寫在一個(gè)文件中運(yùn)行,否則會(huì)由于瀏覽器等原因產(chǎn)生誤差。
冒泡排序的動(dòng)態(tài)圖演示:
(3)算法分析
最佳情況:T(n) = O(n)
當(dāng)輸入的數(shù)據(jù)已經(jīng)是正序時(shí)
最壞情況:T(n) = O(n2)
當(dāng)輸入的數(shù)據(jù)是反序時(shí)
平均情況:T(n) = O(n2)
2.選擇排序(Selection Sort)
表現(xiàn)最穩(wěn)定的排序算法之一,因?yàn)闊o論什么數(shù)據(jù)進(jìn)去都是O(n²)的時(shí)間復(fù)雜度…..所以用到它的時(shí)候,數(shù)據(jù)規(guī)模越小越好。唯一的好處可能就是不占用額外的內(nèi)存空間了吧。理論上講,選擇排序可能也是平時(shí)排序一般人想到的最多的排序方法了吧。
(1)算法簡介
選擇排序(Selection-sort)是一種簡單直觀的排序算法。它的工作原理:首先在未排序序列中找到最?。ù螅┰兀娣诺脚判蛐蛄械钠鹗嘉恢?,然后,再從剩余未排序元素中繼續(xù)尋找最?。ù螅┰?,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。
(2)算法描述和實(shí)現(xiàn)
n個(gè)記錄的直接選擇排序可經(jīng)過n-1趟直接選擇排序得到有序結(jié)果。具體算法描述如下:
<1>.初始狀態(tài):無序區(qū)為R[1..n],有序區(qū)為空;<2>.第i趟排序(i=1,2,3…n-1)開始時(shí),當(dāng)前有序區(qū)和無序區(qū)分別為R[1..i-1]和R(i..n)。該趟排序從當(dāng)前無序區(qū)中-選出關(guān)鍵字最小的記錄 R[k],將它與無序區(qū)的第1個(gè)記錄R交換,使R[1..i]和R[i+1..n)分別變?yōu)橛涗泜€(gè)數(shù)增加1個(gè)的新有序區(qū)和記錄個(gè)數(shù)減少1個(gè)的新無序區(qū);<3>.n-1趟結(jié)束,數(shù)組有序化了。
Javascript代碼實(shí)現(xiàn):
(3)算法分析
最佳情況:T(n) = O(n2)最差情況:T(n) = O(n2)平均情況:T(n) = O(n2)
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- JavaScript算法學(xué)習(xí)之冒泡排序和選擇排序
- JavaScript實(shí)現(xiàn)的九種排序算法
- JavaScript插入排序算法原理與實(shí)現(xiàn)方法示例
- JavaScript選擇排序算法原理與實(shí)現(xiàn)方法示例
- 常用的 JS 排序算法 整理版
- JS排序算法之冒泡排序,選擇排序與插入排序?qū)嵗治?/a>
- JS排序算法之希爾排序與快速排序?qū)崿F(xiàn)方法
- js算法中的排序、數(shù)組去重詳細(xì)概述
- 幾種經(jīng)典排序算法的JS實(shí)現(xiàn)方法
- Javascript中的常見排序算法
- javascript快速排序算法詳解
- JavaScript中幾種常見排序算法小結(jié)
- javascript中可能用得到的全部的排序算法
相關(guān)文章
JavaScript實(shí)現(xiàn)N皇后問題算法謎題解答
這篇文章主要介紹了JavaScript實(shí)現(xiàn)N皇后問題算法謎題解答,N皇后問題是指將N個(gè)皇后放置在NxN的國際象棋棋盤上,其中沒有任何兩個(gè)皇后處于同一行、同一列或同一對(duì)角線上,以使得它們不能互相攻擊,需要的朋友可以參考下2014-12-12JS實(shí)現(xiàn)的數(shù)組全排列輸出算法
這篇文章主要介紹了JS實(shí)現(xiàn)的數(shù)組全排列輸出算法,實(shí)例分析了全排列的原理與相關(guān)的javascript實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-03-03JS實(shí)現(xiàn)瀏覽器打印、打印預(yù)覽示例
本篇文章主要介紹了JS實(shí)現(xiàn)瀏覽器打印、打印預(yù)覽示例。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02Package.js 現(xiàn)代化的JavaScript項(xiàng)目make工具
Package.js是一個(gè)很方便的JavaScript包依賴管理及Make工具。它的設(shè)計(jì)目標(biāo)是使瀏覽器端的JavaScript Component/App 開發(fā)更加模塊化2012-05-05document節(jié)點(diǎn)對(duì)象的獲取方式示例介紹
如果要操作一個(gè)元素,首先要獲取到它,下面為大家介紹下document節(jié)點(diǎn)對(duì)象的獲取方式,感興趣的朋友不要錯(cuò)過2013-12-12JS實(shí)現(xiàn)統(tǒng)計(jì)復(fù)選框選中個(gè)數(shù)并提示確定與取消的方法
這篇文章主要介紹了JS實(shí)現(xiàn)統(tǒng)計(jì)復(fù)選框選中個(gè)數(shù)并提示確定與取消的方法,可實(shí)現(xiàn)javascript針對(duì)頁面復(fù)選框元素的統(tǒng)計(jì)與提示功能,需要的朋友可以參考下2015-07-07