摘要:懶惰了很久,人有點(diǎn)生銹,所以寫個(gè)算法系列讓自己腦筋活躍起來。所有范例一律從小到大排序選擇排序比冒泡的改進(jìn)是,不會(huì)頻繁交換元素,而只是記錄索引,最后再交換。
懶惰了很久,人有點(diǎn)生銹,所以寫個(gè)算法系列讓自己腦筋活躍起來。
(所有范例一律從小到大排序)
選擇排序比冒泡的改進(jìn)是,不會(huì)頻繁交換元素,而只是記錄索引,最后再交換。
選擇排序
給定數(shù)組:
var list = [ 54, 26, 93, 17, 77, 31, 44, 88, 55, 20 ];
算法描述:
首先設(shè)k=0,假定首元素既索引k代表最小元素,然后將第一個(gè)元素與第二個(gè)元素對(duì)比,如果第一個(gè)元素比第二個(gè)元素大,更改此時(shí)的索引k=1,既現(xiàn)在第二個(gè)元素是最小元素,此時(shí):
k = 1;
將第二個(gè)元素與第三個(gè)元素對(duì)比,此時(shí)第二個(gè)元素比第三個(gè)元素小,保持原樣不變;
k = 1;
重復(fù)上面的步驟,直到最后我們用倒數(shù)第二個(gè)元素與倒數(shù)第一個(gè)元素相比之后;經(jīng)過第一輪排序,我們確定了最小元素的索引,然后與首元素交換位置,此時(shí)最小元素排列在數(shù)組首尾;
k = 3; [list[0], list[3]] = [list[3], list[0]];
然后我們重復(fù)1,2,3步驟;經(jīng)過第二輪我們會(huì)找到次小的元素索引,放到數(shù)組第二位;
k = 9; [list[1], list[9]] = [list[9], list[1]];
再次重復(fù)直到整個(gè)數(shù)組有序;
第1輪: [ 17, 26, 93, 54, 77, 31, 44, 88, 55, 20 ] 第2輪: [ 17, 20, 93, 54, 77, 31, 44, 88, 55, 26 ] 第3輪: [ 17, 20, 26, 54, 77, 31, 44, 88, 55, 93 ] 第4輪: [ 17, 20, 26, 31, 77, 54, 44, 88, 55, 93 ] 第5輪: [ 17, 20, 26, 31, 44, 54, 77, 88, 55, 93 ] 第6輪: [ 17, 20, 26, 31, 44, 54, 77, 88, 55, 93 ] 第7輪: [ 17, 20, 26, 31, 44, 54, 55, 88, 77, 93 ] 第8輪: [ 17, 20, 26, 31, 44, 54, 55, 77, 88, 93 ] 第9輪: [ 17, 20, 26, 31, 44, 54, 55, 77, 88, 93 ]
算法實(shí)現(xiàn):
function select(list) { // 做length-1輪比較 for (let i = 0; i < list.length - 1; i++) { // 假定k是最小元素 let k = i; // 兩兩對(duì)比 找到比最小元素還小的索引 for (let j = i + 1; j < list.length; j++) { if (list[j] < list[k]) { k = j; } } // 交換 [list[i], list[k]] = [list[k], list[i]]; } } // 測(cè)試 var list = [ 54, 26, 93, 17, 77, 31, 44, 88, 55, 20 ]; select(list); console.log(list); // [ 17, 20, 26, 31, 44, 54, 55, 77, 88, 93 ]
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/93216.html
摘要:懶惰了很久,人有點(diǎn)生銹,所以寫個(gè)算法系列讓自己腦筋活躍起來。所有范例一律從小到大排序插入排序的思路可以參考抓撲克牌假定我們已有的撲克牌已經(jīng)有序,現(xiàn)在抓了一張新牌,我們需要插入到適當(dāng)?shù)奈恢靡员3株?duì)列依然有序。 懶惰了很久,人有點(diǎn)生銹,所以寫個(gè)算法系列讓自己腦筋活躍起來。 (所有范例一律從小到大排序) 插入排序的思路可以參考抓撲克牌:假定我們已有的撲克牌已經(jīng)有序,現(xiàn)在抓了一張新牌,我們需要...
懶惰了很久,人有點(diǎn)生銹,所以寫個(gè)算法系列讓自己腦筋活躍起來。 (所有范例一律從小到大排序) 冒泡排序 給定數(shù)組: var list = [ 54, 26, 93, 17, 77, 31, 44, 88, 55, 20 ]; 算法描述: 將第一個(gè)元素與第二個(gè)元素對(duì)比,此時(shí)第一個(gè)元素比第二個(gè)元素大,交換他們,這樣較大的元素就位于第二個(gè)位置了; list = [ 26, 54, 93, 17, 77...
摘要:代碼實(shí)現(xiàn)六堆排序算法簡(jiǎn)介堆排序是指利用堆這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法。九計(jì)數(shù)排序算法簡(jiǎn)介計(jì)數(shù)排序是一種穩(wěn)定的排序算法。計(jì)數(shù)排序不是比較排序,排序的速度快于任何比較排序算法。 贊助我以寫出更好的文章,give me a cup of coffee? 2017最新最全前端面試題 1、插入排序 1)算法簡(jiǎn)介 插入排序(Insertion-Sort)的算法描述是一種簡(jiǎn)單直觀的排序算法。它...
摘要:二代碼簡(jiǎn)單選擇排序一分析循環(huán)次,每一次的當(dāng)前項(xiàng)與其之后的項(xiàng)作比較,找出其中最小的那個(gè),與當(dāng)前項(xiàng)交換。二代碼希爾排序是一種改進(jìn)版的插入排序,縮小增量排序。這樣做的目的是因?yàn)椋苯硬迦肱判蛟谛蛄谢居行驎r(shí)效率最高。 排序算法 平均情況 最好情況 最壞情況 輔助空間 穩(wěn)定性 冒泡排序 O(n^2) O(n) O(n^2) O(1) 穩(wěn)定 簡(jiǎn)單選擇排序 O(n^2) O(n^2)...
摘要:常見的內(nèi)部排序算法有插入排序希爾排序選擇排序冒泡排序歸并排序快速排序堆排序基數(shù)排序等。這里主要介紹選擇排序。一圖勝千言算法描述選擇排序是一種簡(jiǎn)單直觀的排序算法,無(wú)論什么數(shù)據(jù)進(jìn)去都是的時(shí)間復(fù)雜度。重復(fù)第二步,直到所有元素均排序完畢。 常見的內(nèi)部排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。這里主要介紹選擇排序。 一圖勝千言: showImg(...
閱讀 1358·2021-09-22 15:09
閱讀 2678·2021-08-20 09:38
閱讀 2419·2021-08-03 14:03
閱讀 878·2019-08-30 15:55
閱讀 3384·2019-08-30 12:59
閱讀 3561·2019-08-26 13:48
閱讀 1899·2019-08-26 11:40
閱讀 681·2019-08-26 10:30