摘要:冒泡排序冒泡排序算法的運作如下比較相鄰的元素。交換次數比冒泡排序少多了快速排序快速排序算法的運作如下找一個數,對數組進行掃描,小于這個數的放在這個數的左側,大于它的放在數組右側在對左右兩側的數組分別進行剛才的操作,直到數組長度為時結束。
1.冒泡排序 1.1 冒泡排序算法的運作如下:
1.比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 2.對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對。在這一點,最后的元素應該會是最大的數。 3.針對所有的元素重復以上的步驟,除了最后一個。 4.持續(xù)每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較。1.2 javaScript中的實現
var arr = [9,8,7,6,5,4,3,2,1,0]; //交換arr[i]和arr[j] function swap(arr,i,j){ var temp; temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } //冒泡排序 function bubbleSort(arr){ var leap = 0; if(arr.length==0) return; for(var i = 0 ; i < arr.length ; i++){ leap = 0; for(var j = 1 ; j < arr.length ; j++){ if(arr[j-1] > arr[j]){ swap(arr,j-1,j); leap = 1; } } //如果沒有交換,即排序正確,提前結束 if(leap == 0){ return; } } return arr; } console.log(bubbleSort(arr)); // arr = [0,1,2,3,4,5,6,7,8,9]
冒泡排序總的平均時間復雜度為Q(n^2)。
2.選擇排序 2.1 選擇排序算法的思想:循環(huán)arr.length次,從i=0開始,第i次循環(huán)將比較得到的最小(或最大)的數與a[i]交換位置,即每次循環(huán)拿出最值放到其應該在的位置,并且將其踢出下次循環(huán)。2.2 javaScript中的實現
//選擇排序 function selectionSort(arr){ var min; if(arr.length <= 1) return; for(var i = 0 ; i < arr.length-1 ; i++){ min=i; for(var j = i+1 ; j < arr.length ; j++) { if(arr[j] < arr[min]){ min = j; } } swap(arr,i,min); } return arr; } console.log(selectionSort(arr)); // arr = [0,1,2,3,4,5,6,7,8,9]
比較次數O(n^2),比較次數與關鍵字的初始狀態(tài)無關,總的比較次數N=(n-1)+(n-2)+...+1=n*(n-1)/2。交換次數O(n),最好情況是,已經有序,交換0次;最壞情況交換n-1次,逆序交換n/2次。交換次數比冒泡排序少多了
3.快速排序 3.1 快速排序算法的運作如下:1.找一個數,對數組進行掃描,小于這個數的放在這個數的左側,大于它的放在數組右側 2.在對左右兩側的數組分別進行剛才的操作,直到數組長度為1時結束。3.2 javaScript中的實現
//快速排序 function fastSort(arr,begin,end){ //當end <= begin時結束遞歸 if(end <= begin){ return ; } var t = begin; var i = begin+1; var j = end; var v = arr[begin]; while (i <= j){ //通過選定的軸和其后一個值進行比較,如后一個值比他小則交換并且兩個同時加一并且再比較,如比他大則a[i]和a[j]進行交換并且再比較a[begin]和a[i]的值 if (arr[i] <= v){ swap(arr, t++, i++); }else if(arr[i] > v){ swap(arr, i, j--); } } fastSort(arr, begin, t-1); fastSort(arr, j+1, end); } fastSort(arr,0,arr.length-1); console.log(arr); //arr = [0,1,2,3,4,5,6,7,8,9]
此快速排序是優(yōu)化過的,能否再優(yōu)化以后再試試看。
以上代碼有部分是借鑒的,如有不足請指教^_^
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/94736.html
摘要:用冒泡排序快速排序選擇排序冒泡排序冒泡排序是比較經典的排序方法,是一種用時間換空間的排序方法。找到并交換的時候,指針位置不變。選擇排序沒趟都會產生最小值,它不是相鄰元素的比較而是在該元素設置一個索引。選擇排序循環(huán)找到從開始到最后的最小的數 用js冒泡排序,快速排序,選擇排序 1.冒泡排序 冒泡排序是比較經典的排序方法,是一種用時間換空間的排序方法。我總結了一下它的特點:(1)它的時間復...
摘要:上一篇數據結構與算法樹寫在前面這是學習數據結構與算法的最后一篇博客,也是在面試中常常會被問到的一部分內容排序和搜索。 上一篇:JS數據結構與算法_樹 寫在前面 這是《學習JavaScript數據結構與算法》的最后一篇博客,也是在面試中常常會被問到的一部分內容:排序和搜索。在這篇博客之前,我每每看到排序頭就是大的,心里想著類似冒泡排序,兩層遍歷啪啪啪就完事了,然后再也無心去深入研究排序相...
摘要:優(yōu)化當待排序序列長度時,使用插入排序,可以加速排序。插入排序原理通過構建有序序列,對于未排序元素,在已排序序列中從后向前掃描,找到相應位置并插入。堆排序可通過樹形結構保存部分比較結果,可減少比較次數。 前端學習:教程&開發(fā)模塊化/規(guī)范化/工程化/優(yōu)化&工具/調試&值得關注的博客/Git&面試-前端資源匯總 歡迎提issues斧正:排序算法 JavaScript-排序算法及簡易優(yōu)化 快速...
本篇有7k+字, 系統(tǒng)梳理了js中常見的12種排序算法。除了基本排序算法,文章還包含了希爾排序、堆排序、桶排序等較為復雜的排序實現,如果喜歡請點贊支持~謝謝. 原文: http://louiszhai.github.io/20... 導讀 排序算法可以稱得上是我的盲點, 曾幾何時當我知道Chrome的Array.prototype.sort使用了快速排序時, 我的內心是奔潰的(啥是快排, 我只知道...
摘要:之所以把冒泡排序選擇排序插入排序放在一起比較,是因為它們的平均時間復雜度都為。其中,冒泡排序就是原地排序算法。所以冒泡排序是穩(wěn)定的排序算法。選擇排序思路選擇排序算法的實現思路有點類似插入排序,也分已排序區(qū)間和未排序區(qū)間。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 算法為王。 想學好前端,先練好內功,...
閱讀 3621·2021-09-30 09:59
閱讀 2229·2021-09-13 10:34
閱讀 577·2019-08-30 12:58
閱讀 1507·2019-08-29 18:42
閱讀 2198·2019-08-26 13:44
閱讀 2922·2019-08-23 18:12
閱讀 3321·2019-08-23 15:10
閱讀 1625·2019-08-23 14:37