本篇文章我們來(lái)了解一下JavaScript中的冒泡排序與選擇排序的相關(guān)知識(shí),起泡法每次比較就要立刻交換,而選擇排序是把未排序最小的數(shù)找出來(lái)與它應(yīng)在的位置上的元素交換。選擇排序交換次數(shù)較少,一定程度上提高了運(yùn)算效率。希望對(duì)大家有幫助。
JavaScript冒泡排序與選擇排序
冒泡排序
-
原理:
比較兩個(gè)相鄰的元素,將值大的元素交換到右邊,直到最右邊。注意核心是相鄰。
-
思路:
依次比較相鄰的兩個(gè)數(shù),將比較小的數(shù)放在前面,比較大的數(shù)放在后面。第一輪下來(lái)數(shù)組中最大的數(shù)會(huì)排在最后面。
第二輪:然后數(shù)組再剩余的數(shù)中從第一個(gè)數(shù)依次比較相鄰的數(shù),將最大的數(shù)排在最后面。
重復(fù)步驟,直到排序完成。
注意:到倒數(shù)第二輪完時(shí),最后一輪還剩一個(gè)數(shù),肯定是最小的,所以不用排序。即就是只用排序 數(shù)組的長(zhǎng)度減一(arr.length-1)輪
算法可視化:
代碼如下:
<script> function ismaopao(arr) { //控制比較輪數(shù) for (var i = 0; i < arr.length - 1; i++) { //冒泡排序,兩兩交換,從頭開始做比較(大數(shù)下沉) for (var j = 0; j < arr.length - 1 - i; j++) { //arr.length-1-i,因?yàn)榍懊娴呐袛嘁呀?jīng)找到最大的值,就不需要與找到的大數(shù)做比較了 if (arr[j] > arr[j + 1]) { var a; a = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = a; } } } return arr; } console.log(ismaopao([6, 3, 4, 5, 2, 1])) </script>
結(jié)果如下:
選擇排序
-
思路:
假設(shè)數(shù)組第一個(gè)位置的數(shù)最小,然后與后面的每一個(gè)數(shù)進(jìn)行比較,只要找到更小的就交換值對(duì)應(yīng)的下標(biāo),注意是下標(biāo)。第一輪找一遍之后可以鎖定到最小值的位置了(就是找到了下標(biāo))然后就交換值。
第二輪假設(shè)第二個(gè)位置的數(shù)最小,這時(shí)候不用管數(shù)組第一個(gè)值(因?yàn)榈谝惠喺业揭呀?jīng)是最小的了)然后與后面最小值交換下標(biāo),鎖定后再交換值。
重復(fù)步驟,直到排序完成。
注意:到倒數(shù)第二輪完時(shí),最后一輪還剩一個(gè)數(shù),肯定是比前面的數(shù)都還大,所以不用排序。即就是只用排序 數(shù)組的長(zhǎng)度減一(arr.length-1)輪
算法可視化:
代碼如下:
沒(méi)有封裝,大家可以自己封裝一下
<script> //選擇排序,比冒泡排序次數(shù)少 var arr = [5, 3, 4, 2, 1] var min = 0; //定義一個(gè)Min為數(shù)組的下標(biāo) for (var i = 0; i < arr.length - 1; i++) { min = i; for (var j = i + 1; j < arr.length; j++) { if (arr[min] > arr[j]) { min = j; //交換下標(biāo),就是交換位置 } } var a = 0; // 現(xiàn)在min的值就是對(duì)應(yīng)著數(shù)組最小值的下標(biāo), // 然后再用下標(biāo)為i對(duì)應(yīng)數(shù)組中的值來(lái)交換,i隨著每一輪的變化而變化 a = arr[min]; arr[min] = arr[i]; arr[i] = a; } console.log(arr); </script>
結(jié)果如下:
相關(guān)視頻教程推薦:jQuery視頻教程