js實現(xiàn)常用排序算法
更新時間:2016年08月09日 09:16:55 作者:_eve
這篇文章主要為大家詳細介紹了js實現(xiàn)常用排序算法的代碼,感興趣的小伙伴們可以參考一下
本文為大家分享了js實現(xiàn)常用排序算法,具體內(nèi)容如下
1.冒泡排序
var bubbleSort = function (arr) { var flag = true; var len = arr.length; for (var i = 0; i < len - 1; i++) { flag = true; for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j+1]; arr[j+1] = arr[j]; arr[j] = temp; flag = false; } } if (flag) { break; } } };
2.選擇排序
var selectSort = function (arr) { var min; for (var i = 0; i < arr.length-1; i++) { min = i; for (var j = i + 1; j < arr.length; j++) { if (arr[min] > arr[j]) { min = j; } } if (i != min) { swap(arr, i, min); } } }; function swap(arr, index1, index2) { var temp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = temp; };
3.插入排序
var insertSort = function (arr) { var len = arr.length, key; for (var i = 1; i < len; i++) { var j = i; key = arr[j]; while (--j > -1) { if (arr[j] > key) { arr[j + 1] = arr[j]; } else { break; } } arr[j + 1] = key; } };
4.希爾排序
var shellSort = function (arr) { var gaps = [5, 3, 1]; for (var g = 0; g < gaps.length; ++g) { for (var i = gaps[g]; i < arr.length; ++i) { var temp = arr[i]; for (var j = i; j >= gaps[g] && arr[j - gaps[g]] > temp; j -= gaps[g]) { arr[j] = arr[j - gaps[g]]; } arr[j] = temp; } } };
5.歸并排序
function mergeSort(arr) { if (arr.length < 2) { return; } var step = 1; var left, right; while (step < arr.length) { left = 0; right = step; while (right + step <= arr.length) { mergeArrays(arr, left, left + step, right, right + step); left = right + step; right = left + step; } if (right < arr.length) { mergeArrays(arr, left, left + step, right, arr.length); } step *= 2; } } function mergeArrays(arr, startLeft, stopLeft, startRight, stopRight) { var rightArr = new Array(stopRight - startRight + 1); var leftArr = new Array(stopLeft - startLeft + 1); k = startRight; for (var i = 0; i < (rightArr.length - 1); ++i) { rightArr[i] = arr[k]; ++k; } k = startLeft; for (var i = 0; i < (leftArr.length - 1); ++i) { leftArr[i] = arr[k]; ++k; } rightArr[rightArr.length - 1] = Infinity; // 哨兵值 leftArr[leftArr.length - 1] = Infinity; // 哨兵值 var m = 0; var n = 0; for (var k = startLeft; k < stopRight; ++k) { if (leftArr[m] <= rightArr[n]) { arr[k] = leftArr[m]; m++; } else { arr[k] = rightArr[n]; n++; } } }
6.快速排序
var quickSort = function(arr, left, right) { var i, j, t, pivot; if (left >= right) { return; } pivot = arr[left]; i = left; j = right; while (i != j) { while (arr[j] >= pivot && i < j) { j--; } while (arr[i] <= pivot && i < j) { i++; } if (i < j) { t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } arr[left] = arr[j]; arr[j] = pivot; quickSort(arr, left, i - 1); quickSort(arr, i + 1, right); }
總結:算法效率比較:
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- 圖文詳解Heap Sort堆排序算法及JavaScript的代碼實現(xiàn)
- Javascript實現(xiàn)快速排序(Quicksort)的算法詳解
- JavaScript算法系列之快速排序(Quicksort)算法實例詳解
- JS中數(shù)據(jù)結構與算法---排序算法(Sort Algorithm)實例詳解
- js交換排序 冒泡排序算法(Javascript版)
- 幾種經(jīng)典排序算法的JS實現(xiàn)方法
- Javascript中的常見排序算法
- Javascript排序算法之合并排序(歸并排序)的2個例子
- JavaScript中幾種常見排序算法小結
- JavaScript實現(xiàn)經(jīng)典排序算法之選擇排序
- JS實現(xiàn)的計數(shù)排序與基數(shù)排序算法示例
- JS中的算法與數(shù)據(jù)結構之常見排序(Sort)算法詳解
相關文章
js操作Xml(向服務器發(fā)送Xml,處理服務器返回的Xml)(IE下有效)
js操作Xml(向服務器發(fā)送Xml,處理服務器返回的Xml)(暫只IE下有效)2009-01-01JS中Generator函數(shù)與async函數(shù)用法介紹
javascript中經(jīng)常會用到異步編程,在ES6之后我們使用的?Generator函數(shù)、async函數(shù)、promise都是我們異步編程的一大助力,這里我們主要講解Generator、async函數(shù),并且簡介他們之間的一些聯(lián)系,本篇文章會帶著一些簡易案例,方便大家理解使用2023-06-06JavaScript優(yōu)化專題之Loading and Execution加載和運行
這篇文章主要介紹了JavaScript優(yōu)化專題中Loading and Execution加載和運行的相關資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-01-01jquery的.click()點擊事件為什么無效,on('click',function())如何使
jquery的.click()點擊事件,通常都是可以正常使用的,有時選中的選擇器被點擊時無法觸發(fā)回調(diào)函數(shù),這是為什么呢?改成on綁定click就可以了嗎?面對這樣的情況,on('click',function())應該如何使用?2023-08-08用javascript對一個json數(shù)組深度賦值示例
本節(jié)主要介紹了用javascript對一個json數(shù)組深度賦值的具體實現(xiàn),需要的朋友可以參考下2014-07-07