摘要:本文記錄了我在學習前端上的筆記,方便以后的復習和鞏固。冒泡排序算法步驟比較相鄰的元素。這步做完后,最后的元素會是最大的數(shù)。重復第二步,直到所有元素均排序完畢。得到序列第二趟,,和進行交換。
冒泡排序 1.算法步驟本文記錄了我在學習前端上的筆記,方便以后的復習和鞏固。
推薦大家去看看這一本gitBook上的書十大經(jīng)典排序算法本文就是看這本書記錄的筆記。
1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。這步做完后,最后的元素會是最大的數(shù)。
3.針對所有的元素重復以上的步驟,除了最后一個。
4.持續(xù)每次對越來越少的元素重復上面的步驟,直到?jīng)]有任何一對數(shù)字需要比較。
代碼實現(xiàn):
//數(shù)組內兩個值互換 function swap(arr, index1, index2) { var temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp; }
function bubbleSort(arr){ var len = arr.length,i,j; for(i = 0; i < len - 1; i++){ //進行l(wèi)en-1趟選擇(循環(huán)),第一趟循環(huán)會選出最i個最大記錄 //因為i循環(huán)已經(jīng)拿到了最后的數(shù)值,i循環(huán)一次拿到一次最大的數(shù)值所以減i,i = 已被排序好的數(shù)值數(shù)量 for(j = 0; j < len - 1 - i;){ //比較相鄰的數(shù)值,如果第一個比第二個大就交換他們。 交換到最后最大數(shù)值排在數(shù)組最后 if(arr[j] > arr[j+1]){ swap(arr , j, j+1); } } } return arr; }詳解
依次比較相鄰的兩個元素,如果后一個小于前一個,則交換,這樣從頭到尾一次(外循環(huán)一次)就將最大的數(shù)放在了數(shù)組末尾。
從頭到尾再來一次(外循環(huán)),由于每進行一輪,最后的都已經(jīng)是最大的了,因此后一輪需要比較(內循環(huán))的次數(shù)可以比上一次少一個(i個)。雖然你還是可以讓他從頭到尾來比較,但是后面比較都是沒有意義的,為了效率,你應該對代碼進行優(yōu)化。
選擇排序 1.算法步驟1.首先在未排序序列中找到最?。ù螅┰?,存放到排序序列的起始位置
2.再從剩余未排序元素中繼續(xù)尋找最?。ù螅┰?,然后放到已排序序列的末尾。
3.重復第二步,直到所有元素均排序完畢。
function selectionSort(arr){ var len = arr.length; var index,temp; for(var i = 0; i < arr.length - 1; i++){ //進行l(wèi)en - 1趟選擇(循環(huán)),選擇第i個最小記錄。 var index = i; //因為i循環(huán)已經(jīng)拿了最前面的數(shù)值 所以j循環(huán)復制拿后面的數(shù)值和進行對比。 for(var j = i + 1; j < arr.length; j++){ if(arr[j] < arr[index]){ //第一次循環(huán)次數(shù)的min = 1 index = j; //將最小數(shù)的索引保存,選擇第i個小記錄的下標賦值給min,arr[min]為最小數(shù)值 } } if(j != index){ //與第i個小記錄交換 i和min相同代表已經(jīng)排序完畢 swap(arr, i, index); } } return arr; }
示例:假設給定數(shù)組A[1......6]={ 3,5,8,9,1,2 },我們來分析一下A數(shù)組進行選擇排序的過程
第一趟:i=1,index=5, a[1] 和 a[5] 進行交換。得到序列:{ 1,5,8,9,3,2 } 第二趟:i=2,index=6, a[2] 和 a[6] 進行交換。得到序列:{ 1,2,8,9,3,5 } 第三趟:i=3,index=5, a[3] 和 a[5] 進行交換。得到序列:{ 1,2,3,9,8,5 } 第四趟:i=4,index=6, a[3] 和 a[5] 進行交換。得到序列:{ 1,2,3,5,8,9 } 第五趟:i=5,index=5, 不用交換。得到序列:{ 1,2,3,5,8,9 } (6-1)趟選擇結束,得到有序序列:{ 1,2,3,5,8,9 }插入排序 1.步驟
1.將第一待排序序列第一個元素看做一個有序序列,把第二個元素到最后一個元素當成是未排序序列。
2.從頭到尾依次掃描未排序序列,將掃描到的每個元素插入有序序列的適當位置。(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的后面。)
2.動圖演示function insertionSort(arr) { var len = arr.length; var value; //循環(huán)len趟,外層循環(huán)順序是從數(shù)組的第一位到最后一位 for(var i = 1; i < len; i++){ value = arr[i]; //每趟循環(huán)拿到第i的數(shù)值賦值給Value //內層順序是從后往前 j = i - 1會跳過已經(jīng)排好序的部分。比較后面的數(shù)值是否大于前面的數(shù)值 for(var j = i - 1; j > -1 && arr[j] > value; j--){ arr[j+1] = arr[j] //滿足條件直接交換 } //因為前面已經(jīng)排好序直接給value賦值排好序的最后一個 arr[j+1] = value; } }
代碼塊中的注釋只是自己的理解,如果有錯誤請指正,多謝各位了
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/82339.html
摘要:排序算法學習筆記用于創(chuàng)建數(shù)組冒泡排序冒泡排序比較任何兩個相鄰的項,如果第一個比第二個大,則交換它們。歸并排序歸并排序是一種分治算法。完成下列操作的前提是數(shù)組均已經(jīng)完成。 javaScript排序算法學習筆記 // 用于創(chuàng)建數(shù)組 function createNonSortedArray(size) { var array = new ArrayList(); for( ...
摘要:強烈推薦上值得前端學習的數(shù)據(jù)結構與算法項目,包含圖的演示過程與視頻講解。該倉庫包含了多種基于的算法與數(shù)據(jù)結構,提供進一步閱讀的解釋和鏈接。數(shù)據(jù)結構和算法必知必會的個代碼實現(xiàn)。 showImg(https://segmentfault.com/img/bVbvpYZ); 前言 算法為王。想學好前端,先練好內功,內功不行,就算招式練的再花哨,終究成不了高手;只有內功深厚者,前端之路才會走得...
摘要:今天同學去面試,做了兩道面試題全部做錯了,發(fā)過來給道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 排序算法 -- JavaScript 標準參考教程(alpha) - 前端 - 掘金來自《JavaScript 標準參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡介 算法實現(xiàn) 選擇排序 簡介 算法實現(xiàn) ... 圖例詳解那道 setTimeout 與循環(huán)閉包的經(jīng)典面...
摘要:使用來描述算法和數(shù)據(jù)結構的教程很少,目前市面上用描述算法和數(shù)據(jù)結構的書屈指可數(shù),并且就我看過的那本而言我只看過數(shù)據(jù)結構與算法語言描述質量實在堪憂。 使用JavaScript來描述算法和數(shù)據(jù)結構的教程很少, 目前市面上用JS描述算法和數(shù)據(jù)結構的書屈指可數(shù),并且就我看過的那本而言(我只看過《數(shù)據(jù)結構與算法 JavaScript 語言描述》)質量實在堪憂。碰巧有次看到Nicolas博客中的C...
閱讀 3054·2021-09-03 10:33
閱讀 1278·2019-08-30 15:53
閱讀 2627·2019-08-30 15:45
閱讀 3389·2019-08-30 14:11
閱讀 541·2019-08-30 13:55
閱讀 2590·2019-08-29 15:24
閱讀 1921·2019-08-26 18:26
閱讀 3573·2019-08-26 13:41