摘要:冒泡排序算法即相鄰的兩個(gè)元素進(jìn)行比較,如果前一個(gè)元素比后一個(gè)元素大,則將這兩個(gè)元素?fù)Q位,即將較大的元素后置。重復(fù)操作,每次都將的值折半比較,直到,唯的時(shí)候排序操作結(jié)束。歸并排序通過(guò)遞歸的方式不斷的合并兩個(gè)有序數(shù)組完成數(shù)組的排序
1. 冒泡排序算法: 即相鄰的兩個(gè)元素進(jìn)行比較,如果前一個(gè)元素比后一個(gè)元素大,則將這兩個(gè)元素?fù)Q位,即將較大的元素后置。
內(nèi)循環(huán)每走一次都會(huì)將前l(fā)ength - i個(gè)元素中的最大元素放到length - i 的位置上。
var data = [1, 49, 30, 80, 6, 2, 18, 15, 23, 78, 16, 5, 4, 2, 34, 35, 46, 18] function bubble(arr) { var length = arr.length for (var i = 0; i < length; i++) { for(var j = 0; j < length - 1 -i; j++) { var temp = arr[j] if (arr[j] > arr[j+1]) { arr[j] = arr[j+1] arr[j+1] = temp } } } console.log(arr) } bubble(data)2. 選擇排序算法: 每次循環(huán)都選擇最小值,然后將其與當(dāng)前位置的值進(jìn)行互換操作即可
function select(arr) { var minIndex var temp for (var i = 0; i < arr.length-1; i++) { minIndex = i for(var j = i + 1; j < arr.lenght - i - 1; j++) { if (arr[j] < arr[minIndex]) { minIndex = j } } temp = arr[i] arr[i] = arr[minIndex] arr[minIndex] = temp } console.log(arr) } select(data)3. 插入排序: 如果前一個(gè)的值比當(dāng)前值小則二者換位, 直到將這個(gè)碰見比前一個(gè)值小的數(shù)為止
function insert(arr) { for (var i=1; i4. 希爾排序: 先將arr分成arr.length/2組,其中index=1和index=length/2 + 1為一組,= 0 && arr[preIndex] > current) { arr[preIndex+1] = arr[preIndex] preIndex-- } arr[preIndex+1] = current } console.log(arr) } insert(data)
如果length/2的值比較小則互換位置。重復(fù)操作,每次都將gap的值折半比較,
直到,gap唯1的時(shí)候排序操作結(jié)束。
function shell(arr) { function swap(array, i, k) { var temp = array[i] array[i] = array[k] array[k] = temp } var gap = Math.floor(arr.length / 2) while(gap > 0) { for(var i=gap; i5. 歸并排序: 通過(guò)遞歸的方式不斷的合并兩個(gè)有序數(shù)組完成數(shù)組的排序0; j-=gap) { if (arr[j-gap] > arr[j]) { swip(arr, j-gap, j) } } } gap = Math.floor(gap / 2) } console.log(arr) } shell(data)
function mergeSort(arr) { var len = arr.length; if (len < 2) { return arr } var middle = Math.floor(len / 2) var left = arr.slice(0, middle) var right = arr.slice(middle) return merge(mergeSort(left), mergeSort(right)) } function merge(left, right) { var result = []; while (left.length && right.length) { if (left[0] <= right[0]) { result.push(left.shift()); } else { result.push(right.shift()); } } while (left.length) result.push(left.shift()); while (right.length) result.push(right.shift()); return result; } console.log(mergeSort(data))
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/81311.html
摘要:上一篇數(shù)據(jù)結(jié)構(gòu)與算法樹寫在前面這是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法的最后一篇博客,也是在面試中常常會(huì)被問到的一部分內(nèi)容排序和搜索。 上一篇:JS數(shù)據(jù)結(jié)構(gòu)與算法_樹 寫在前面 這是《學(xué)習(xí)JavaScript數(shù)據(jù)結(jié)構(gòu)與算法》的最后一篇博客,也是在面試中常常會(huì)被問到的一部分內(nèi)容:排序和搜索。在這篇博客之前,我每每看到排序頭就是大的,心里想著類似冒泡排序,兩層遍歷啪啪啪就完事了,然后再也無(wú)心去深入研究排序相...
摘要:介紹排序算法是算法中最常見的算法之一,我這里要介紹的是排序算法中的三種基本算法冒泡排序選擇排序插入排序,在文章的后面我會(huì)對(duì)三種算法的速度進(jìn)行對(duì)比。 1.介紹 排序算法是算法中最常見的算法之一,我這里要介紹的是排序算法中的三種基本算法:冒泡排序、選擇排序、插入排序,在文章的后面我會(huì)對(duì)三種算法的速度進(jìn)行對(duì)比。 2.冒泡排序 冒泡排序其名來(lái)源與其算法實(shí)現(xiàn),會(huì)使得數(shù)組中的元素一個(gè)個(gè)從數(shù)組一端漂...
摘要:本文對(duì)一些排序算法進(jìn)行了簡(jiǎn)單分析,并給出了的代碼實(shí)現(xiàn)。平均時(shí)間復(fù)雜度不好分析,它是冒泡排序是穩(wěn)定的排序算法。冒泡排序是原地排序算法原地排序指的是空間復(fù)雜度是的排序算法。歸并排序,會(huì)將數(shù)組從中間分成左右兩部分。 本文對(duì)一些排序算法進(jìn)行了簡(jiǎn)單分析,并給出了 javascript 的代碼實(shí)現(xiàn)。因?yàn)楸疚陌舜罅康呐判蛩惴?,所以分析不?huì)非常詳細(xì),適合有對(duì)排序算法有一定了解的同學(xué)。本文內(nèi)容其實(shí)不...
摘要:冒泡排序冒泡算法是比較相鄰的兩項(xiàng),如果前者比后者大,就交換他們。插入排序最好情況下時(shí)間復(fù)雜度是,其他情況下也都是。代碼演示插入排序歸并排序原生里面的方法,在里面是用歸并排序?qū)崿F(xiàn)的,而在里面是用快速排序的變體來(lái)實(shí)現(xiàn)的。 1、冒泡排序 冒泡算法是比較相鄰的兩項(xiàng),如果前者比后者大,就交換他們。 假設(shè)一共有n項(xiàng),那么一共需要n-1趟,第一趟需要交換n-1次,但是第一趟結(jié)束后,最后一項(xiàng)基本確定就...
摘要:冒泡排序冒泡算法是比較相鄰的兩項(xiàng),如果前者比后者大,就交換他們。插入排序最好情況下時(shí)間復(fù)雜度是,其他情況下也都是。代碼演示插入排序歸并排序原生里面的方法,在里面是用歸并排序?qū)崿F(xiàn)的,而在里面是用快速排序的變體來(lái)實(shí)現(xiàn)的。 1、冒泡排序 冒泡算法是比較相鄰的兩項(xiàng),如果前者比后者大,就交換他們。 假設(shè)一共有n項(xiàng),那么一共需要n-1趟,第一趟需要交換n-1次,但是第一趟結(jié)束后,最后一項(xiàng)基本確定就...
本篇有7k+字, 系統(tǒng)梳理了js中常見的12種排序算法。除了基本排序算法,文章還包含了希爾排序、堆排序、桶排序等較為復(fù)雜的排序?qū)崿F(xiàn),如果喜歡請(qǐng)點(diǎn)贊支持~謝謝. 原文: http://louiszhai.github.io/20... 導(dǎo)讀 排序算法可以稱得上是我的盲點(diǎn), 曾幾何時(shí)當(dāng)我知道Chrome的Array.prototype.sort使用了快速排序時(shí), 我的內(nèi)心是奔潰的(啥是快排, 我只知道...
閱讀 1136·2021-11-22 15:33
閱讀 3442·2021-11-08 13:20
閱讀 1483·2021-09-22 10:55
閱讀 2115·2019-08-29 11:08
閱讀 845·2019-08-26 12:24
閱讀 3145·2019-08-23 17:15
閱讀 2302·2019-08-23 16:12
閱讀 2013·2019-08-23 16:09