JavaScript常见排序算法
1.冒泡排序
function bubble_sort(arr) {
if (arr.length <= 1) {
return arr;
}
var len = arr.length;
for (var i = 0; i < len; i++) {
for (var j = 0; j < len - 1; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
var arr = [3, 5, 8, 1, 2, 4, 7, 9];
var sort = bubble_sort(arr);
console.log(sort);
2.快速排序
function quick_sort(arr) {
if (arr.length <= 1)
return arr;
var pivot = Math.floor((arr.length - 1) / 2), //Math.fllor()返回一个小于或者等于给定数字的最大整数
pivotValue = arr[pivot],
left = [],
right = [];
arr = arr.slice(0, pivot).concat(arr.slice(pivot + 1)); //concat()连接两个数组返回一个新的数组 slice()返回包含提取元素的新数组
for (var i = 0; i < arr.length; i++) {
if (arr[i] < pivotValue) {
left.push(arr[i]);
} else {
right.push(arr[i]);
}
}
return [].concat(quick_sort(left), [pivotValue], quick_sort(right));
}
var arr = [3, 8, 9, 1, 2, 6, 4, 7, 5];
var sort = quick_sort(arr);
console.log(sort);
3.合并排序
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());
}
}
return result.concat(left).concat(right);
}
function merge_sort(arr) {
if (arr.length <= 1) return arr;
var mid = Math.floor(arr.length / 2),
left = arr.slice(0, mid),
right = arr.slice(mid);
return merge(merge_sort(left), merge_sort(right));
}
var arr = [3, 8, 9, 1, 2, 6, 4, 7, 5];
var sort = merge_sort(arr);
console.log(sort);
4.选择排序
function selection_sort(arr) {
for (var i = 0; i < arr.length; i++) {
var min = i;
for (var j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
if (min != i) {
var temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
return arr;
}
var arr = [3, 8, 9, 1, 2, 6, 4, 7, 5];
var sort = selection_sort(arr);
console.log(sort);
5.插入排序
function insertion_sort(arr) {
for (var i = 0; i < arr.length; i++) {
var j = i - 1,
temp = arr[i];
while (j >= 0 && arr[j] > temp) {
arr[j + 1] = arr[j];
arr[j] = temp;
j--;
}
}
return arr;
}
var arr = [3, 8, 9, 1, 2, 6, 4, 7, 5];
var sort = insertion_sort(arr);
console.log(sort);
JavaScript常见排序算法的更多相关文章
- JavaScript版几种常见排序算法
今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...
- javascript常用排序算法总结
算法是程序的灵魂.虽然在前端的开发环境中排序算法不是很经常用到,但常见的排序算法还是应该要掌握的.我在这里从网上整理了一下常见排序算法的javascript实现,方便以后查阅. 归并排序: 1 fun ...
- JS常见排序算法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 常见排序算法(JS版)
常见排序算法(JS版)包括: 内置排序,冒泡排序,选择排序,插入排序,希尔排序,快速排序(递归 & 堆栈),归并排序,堆排序,以及分析每种排序算法的执行时间. index.html <! ...
- 常见排序算法(附java代码)
常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...
- JavaScript版排序算法
JavaScript版排序算法:冒泡排序.快速排序.插入排序.希尔排序(小数据时,希尔排序会比快排快哦) //排序算法 window.onload = function(){ var array = ...
- 常见排序算法-Python实现
常见排序算法-Python实现 python 排序 算法 1.二分法 python 32行 right = length- : ] ): test_list = [,,,,,, ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- javascript高级排序算法之快速排序(快排)
javascript高级排序算法之快速排序(快排)我们之前讨论了javascript基本排序算法 冒泡排序 选择排序 插入排序 简单复习: 冒泡排序: 比较相邻的两个元素,如果前一个比后一个大,则交换 ...
随机推荐
- PIL对象和numpy三维数组的互相转换
#https://stackoverflow.com/questions/384759/how-to-convert-a-pil-image-into-a-numpy-array from PIL i ...
- C++数组常用操作
1. 遍历数组 使用基于范围的for循环来遍历整个数组 用_countof()来得到数组中的元素个数 #include <iostream> #include <cstdio> ...
- Nginx模块-ngx_http_mirror_module-流量复制
参考1:https://www.cnblogs.com/cjsblog/p/12163207.html Nginx流量复制 需求 将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处,比如: ...
- springmvc register过程
福建SEO:首先在AbstractHandlerMethodMapping中,在afterPropertiesSet这个钩子函数中,先初始化handlerMethods. 在detectHandler ...
- ZJNU 1153 - 找单词——中级
状态转移b[i]记录价值为i的单词种类数d[j+k*i]+=b[j] , k<=a[i]&&j+k*i<=50表示价值为j+k*i的单词可以由价值为j的单词加上k个i字母转 ...
- usb转串口驱动安装失败
方法一:通过驱动精灵安装 方法二:手动下载后安装,下载地址如下http://www.wch.cn/download/CH341SER_EXE.html https://blog.csdn.net/ja ...
- SecureCRT8.3
https://blog.csdn.net/dff1993/article/details/81189610 这篇文章我试过,成功激活了SecureCRT8.3
- mysql中datetime时间转字符串(避免java层映射为数字串)
-- in_date datetime NULLDATE_FORMAT(ls.`in_date`,'%Y-%m-%d %T')AS create_time
- Servlet&JSP复习笔记 04
1.状态管理 因为HTTP协议是无状态协议,但很多时候需要将客户端和服务端的多次请求当做一个来对待.将多次交互中设计的数据进行保存. 状态:数据 管理:对数据的维护 2.Cookie 客户端向服务器发 ...
- Arcpy处理修改shapefile FeatureClass 线要素坐标
需求:在开发的webgis系统中需要将道路矢量数据与谷歌地图瓦片叠加,谷歌地图瓦片在国家测绘局的要求是进行了偏移处理的,人称“火星坐标系GCJ_02”,道路数据是WGS-84坐标系下的经纬度坐标,现在 ...