JavaScript選擇排序算法原理與實(shí)現(xiàn)方法示例
本文實(shí)例講述了JavaScript選擇排序算法原理與實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:
一、選擇排序簡(jiǎn)介
冒泡排序、插入排序、選擇排序合稱(chēng)為簡(jiǎn)單排序。下面是選擇排序的思想:
假設(shè)有一個(gè)數(shù)組a,我們想象成有一個(gè)班級(jí)名叫a班,現(xiàn)在全班隨意排成一排,排頭的位置是a[0],排尾的位置是a[a.length-1]。但高矮順序不是有序的,我們想從矮到高排,排頭最矮,排尾最高。
選擇排序是這樣工作的:
第一輪:
(1)a[1]位置隊(duì)員與a[0]位置隊(duì)員比較,如果比a[0]位置隊(duì)員矮,就把a[1]的位置記住,如果不比a[0]隊(duì)員矮,就把a[0]位置記住,記住位置的隊(duì)員是目前已知最矮的;
(2)a[2]位置隊(duì)員與記錄位置隊(duì)員比較,如果比記錄位置隊(duì)員矮,就把a[2]改為記錄位置,如果不比記錄位置隊(duì)員矮則不改變記錄位置,記錄位置的隊(duì)員是目前已知最矮的;
(3)a[3]位置隊(duì)員與記錄位置隊(duì)員比較,如果比記錄位置隊(duì)員矮,就把a[3]改為記錄位置,如果不比記錄位置隊(duì)員矮則不改變記錄位置,記錄位置的隊(duì)員是目前已知最矮的;
······
以此類(lèi)推,直到a[a.length-1]位置隊(duì)員與記錄位置隊(duì)員比較完成,這樣記錄位置隊(duì)員是所有隊(duì)員中最矮的。
但是,我們知道最終要完成排序,最矮的肯定在a[0]位置,因此交換a[0]位置隊(duì)員和記錄位置隊(duì)員。最矮的隊(duì)員成功入坑a[0]號(hào)位!
第二輪:
重復(fù)第一輪的過(guò)程,只不過(guò)這次是從a[1]位置開(kāi)始,依次比較,最終將記錄位置隊(duì)員放入a[1]。第二矮的隊(duì)員成功入坑a[1]號(hào)位!
······
最后一輪:
從a[a.length-2]位置開(kāi)始依次比較,這時(shí)只剩a[a.length-2]和a[a.length-1]還沒(méi)有排好序,經(jīng)過(guò)一次比較,就把第二高的隊(duì)員放入了a[a.length-2]位置,a[a.length-1]位置隊(duì)員肯定是最高的,排序完成。
二、JavaScript實(shí)現(xiàn)選擇排序
function select_sort(arr) {
var k;
var temp;
var l=arr.length;
for (var i = 0; i < l-1; i++) {
k=i;
for (var j = i+1; j < l; j++) {
if (arr[j]<arr[k]) {
k=j;
}
}
temp=arr[k];
arr[k]=arr[i];
arr[i]=temp;
}
return arr;
}
var a=[11,2,3,445,7,32,71,1,94];
console.log(select_sort(a));
var b=[94,11];
console.log(select_sort(b));
說(shuō)明:
如果數(shù)組僅有一個(gè)元素,不會(huì)進(jìn)入外層for循環(huán),因而相當(dāng)于沒(méi)有進(jìn)行任何操作,結(jié)果也是正確的。
上述代碼使用在線HTML/CSS/JavaScript代碼運(yùn)行工具http://tools.jb51.net/code/HtmlJsRun測(cè)試運(yùn)行結(jié)果如下:

PS:這里再為大家推薦一款關(guān)于排序的演示工具供大家參考:
在線動(dòng)畫(huà)演示插入/選擇/冒泡/歸并/希爾/快速排序算法過(guò)程工具:
http://tools.jb51.net/aideddesign/paixu_ys
更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript查找算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- JavaScript算法學(xué)習(xí)之冒泡排序和選擇排序
- JavaScript實(shí)現(xiàn)的九種排序算法
- JavaScript插入排序算法原理與實(shí)現(xiàn)方法示例
- 常用的 JS 排序算法 整理版
- JS排序算法之冒泡排序,選擇排序與插入排序?qū)嵗治?/a>
- JS排序算法之希爾排序與快速排序?qū)崿F(xiàn)方法
- javascript基本常用排序算法解析
- js算法中的排序、數(shù)組去重詳細(xì)概述
- 幾種經(jīng)典排序算法的JS實(shí)現(xiàn)方法
- Javascript中的常見(jiàn)排序算法
- javascript快速排序算法詳解
- JavaScript中幾種常見(jiàn)排序算法小結(jié)
- javascript中可能用得到的全部的排序算法
相關(guān)文章
超詳細(xì)JavaScript深淺拷貝的實(shí)現(xiàn)教程
淺拷貝是指,一個(gè)新的對(duì)象對(duì)原始對(duì)象的屬性值進(jìn)行精確地拷貝;深拷貝是指,對(duì)于簡(jiǎn)單數(shù)據(jù)類(lèi)型直接拷貝他的值,對(duì)于引用數(shù)據(jù)類(lèi)型,在堆內(nèi)存中開(kāi)辟一塊內(nèi)存用于存放復(fù)制的對(duì)象,并把原有的對(duì)象類(lèi)型數(shù)據(jù)拷貝過(guò)來(lái)。本文將實(shí)現(xiàn)JavaScript深淺拷貝,需要的可以參考一下2022-09-09
JavaScript獲取數(shù)組最后一個(gè)元素的3種方法以及性能
在開(kāi)發(fā)過(guò)程中,我們常常需要得到j(luò)s數(shù)組的最后一個(gè)數(shù)組元素,下面這篇文章主要給大家介紹了關(guān)于JavaScript獲取數(shù)組最后一個(gè)元素的3種方法以及性能,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06
Javascript attachEvent傳遞參數(shù)的辦法
找了半天找到的解決辦法,看介紹說(shuō)是javascript的閉包問(wèn)題,導(dǎo)致得不能直接讀取外部的那個(gè)函數(shù),不然就所有傳遞的參數(shù)都變?yōu)樽詈笠粋€(gè)了。2009-12-12
微信小程序?qū)崿F(xiàn)計(jì)時(shí)器開(kāi)始和結(jié)束功能
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)計(jì)時(shí)器開(kāi)始和結(jié)束功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07
javascript實(shí)現(xiàn)下班倒計(jì)時(shí)效果的方法(可桌面通知)
這篇文章主要介紹了javascript實(shí)現(xiàn)下班倒計(jì)時(shí)效果的方法,涉及javascript倒計(jì)時(shí)效果及桌面提示效果的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值2015-07-07
JS選中checkbox后獲取table內(nèi)一行TD所有數(shù)據(jù)的方法
這篇文章主要介紹了JS選中checkbox后獲取table內(nèi)一行TD所有數(shù)據(jù)的方法,涉及javascript針對(duì)table元素遍歷與獲取的技巧,需要的朋友可以參考下2015-07-07
js實(shí)現(xiàn)的在線調(diào)色板功能完整實(shí)例
這篇文章主要介紹了js實(shí)現(xiàn)的在線調(diào)色板功能,結(jié)合完整實(shí)例形式分析了調(diào)色板的完整實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2016-12-12
基于js實(shí)現(xiàn)二級(jí)下拉聯(lián)動(dòng)
這篇文章主要為大家詳細(xì)介紹了基于js實(shí)現(xiàn)二級(jí)下拉聯(lián)動(dòng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-12-12

