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