本文實(shí)例講述了JavaScript數(shù)據(jù)結(jié)構(gòu)與算法之基本排序算法定義與效率比較。分享給大家供大家參考,具體如下:
javascript數(shù)據(jù)結(jié)構(gòu)與算法--基本排序算法(冒泡、選擇、排序)及效率比較
一、數(shù)組測(cè)試平臺(tái)
javascript數(shù)據(jù)結(jié)構(gòu)與算法--基本排序(封裝基本數(shù)組的操作),封裝常規(guī)數(shù)組操作的函數(shù),比如:插入新數(shù)據(jù),顯示數(shù)組數(shù)據(jù),還有交換數(shù)組元素等操作來(lái)調(diào)用不同的排序算法
function CArray(numElements) { this.dataStore = []; this.pos = 0;//是一個(gè)索引值,默認(rèn)為0,從第一個(gè)開(kāi)始 this.numElements = numElements;//是保存所有的數(shù)組元素 this.insert = insert;//向數(shù)組中插入一個(gè)元素的方法 this.toString = toString;//顯示數(shù)組中所有元素 this.clear = clear;//清空數(shù)組數(shù)據(jù) this.setData = setData;//生成了存儲(chǔ)在數(shù)組中的隨機(jī)數(shù)字 this.swap = swap;//交換數(shù)組中兩個(gè)元素的位置 this.bubbleSort = bubbleSort; /*將傳入的數(shù)組,存儲(chǔ)在datastore中*/ for (var i = 0; i < numElements.length; ++i) { this.dataStore[i] = numElements[i]; }}function setData() { for (var i = 0; i < this.numElements; ++i) { this.dataStore[i] = Math.floor(Math.random() * (this.numElements+1)); }}function clear() { for (var i = 0; i < this.dataStore.length; ++i) { this.dataStore[i] = 0; }}function insert(element) { this.dataStore[this.pos++] = element;}function toString() { var retstr = ""; for (var i = 0; i < this.dataStore.length; ++i) { retstr += this.dataStore[i] + " "; if (i > 0 && i % 10 == 0) { retstr += "/n"; } } return retstr;}function swap(arr, index1, index2) { var temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp;}//測(cè)試生成一組數(shù)組數(shù)據(jù)(隨機(jī)數(shù))var numElements = 100;var myNums = new CArray(numElements);myNums.setData();console.log(myNums.toString());17 94 81 80 25 24 73 76 24 35 81
63 81 59 4 76 30 47 73 98 18
54 36 53 47 22 60 88 41 66 24
73 94 40 45 72 74 14 61 92 48
36 12 42 11 12 82 24 84 60 1
17 98 63 36 84 13 18 50 89 26
98 1 6 54 52 69 6 52 98 14
79 28 19 69 76 99 97 100 10 7
24 54 81 73 18 21 45 73 66 30
28 56 54 21 88 31 20 86 48
二、冒泡排序算法
我們先來(lái)了解一下冒泡排序算法,它是最慢的排序算法之一,但也是一種最容易實(shí)現(xiàn)的排序算法。
之所以叫冒泡排序是因?yàn)槭褂眠@種排序算法排序時(shí),數(shù)據(jù)值會(huì)像氣泡一樣從數(shù)組的一端漂浮到另一端。
假設(shè)正在將一組數(shù)字按照升序排列,較大的值會(huì)浮動(dòng)到數(shù)組的右側(cè),而較小的值則會(huì)浮動(dòng)到數(shù)組的左側(cè)。
之所以會(huì)產(chǎn)生這種現(xiàn)象是因?yàn)樗惴〞?huì)多次在數(shù)組中移動(dòng),比較相鄰的數(shù)據(jù),當(dāng)左側(cè)值大于右側(cè)值時(shí)將它們進(jìn)行互換。
JS代碼如下:
新聞熱點(diǎn)
疑難解答
圖片精選