【js基础】js排序方法——快排+堆排+插排+选择排
快排
Array.prototype.fastSort = function(){
var arr = this;
function sort(left, right, arr){
if( left >= right){
return;
}
var key = arr[left];
var i = left;
var j = right;
while(i < j){
while(i < j && arr[j] >= key){
j--;
}
arr[i] = arr[j];
while(i < j && arr[i] <= key){
i++;
}
arr[j] = arr[i];
}
arr[i] = key;
sort(left, i - 1, arr);
sort(i + 1, right, arr);
}
sort(0, arr.length - 1, arr);
return arr;
}
插排
Array.prototype.insertSort = function(){
var arr = this;
var len = arr.length;
for(var i = 1; i < len; i ++ ){
var j = i - 1;
var tmp = arr[i];
while(j >= 0 && tmp < arr[j]){
arr[j + 1] = arr[j];
j--;
}
if(j != i - 1){
arr[j + 1] = tmp;
}
}
return arr;
}
选择排序
Array.prototype.selectSort = function(){
var arr = this;
var len = arr.length;
var min;
var tmp;
for(var i = 0; i < len - 1; i ++ ){
min = i;
for(var j = i + 1; j < len; j++){
if(arr[min] > arr[j]){
min = j;
}
}
if(min != i){
tmp = arr[min];
arr[min] = arr[i];
arr[i] = tmp;
}
}
return arr;
}
堆排序
Array.prototype.swap = function(i, j){
var tmp = this[i];
this[i] = this[j];
this[j] = tmp;
}
//大顶堆
Array.prototype.buildMaxHeap = function(){
for(var i = Math.floor(this.length/2) - 1; i >= 0; i--){
this.heapAdjust(i, this.length);
}
};
//调整堆
Array.prototype.heapAdjust = function(i, j){
var max = i;
var left = 2 * i + 1;
var right = 2 * i + 2;
if(left < j && this[max] < this[left]){
max = left;
}
if(right < j && this[max] < this[right]){
max = right;
}
if(max != i){
this.swap(i,max);
this.heapAdjust(max,j);
};
}
//堆排序
Array.prototype.heapSort = function(){
this.buildMaxHeap();
for(var i = this.length - 1; i >= 0 ; i--){
this.swap(0, i);
this.heapAdjust(0, i);
}
return this;
};
【js基础】js排序方法——快排+堆排+插排+选择排的更多相关文章
- JS基础篇--sort()方法的用法,参数以及排序原理
JS基础篇--sort()方法的用法,参数以及排序原理 sort() 方法用于对数组的元素进行排序,并返回数组.默认排序顺序是根据字符串Unicode码点.语法:arrayObject.sort( ...
- js 几种排序方法
1.冒泡排序 var arr = [9, 7, 5, 3, 1]; for (var i = 0; i < arr.length - 1; i++) { for (var j = 0; j &l ...
- js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域
js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...
- 关于js中sort()排序方法
第一次写这个,算是记录自己的学习前端的一点点的历程吧.今天在做一个图片的随机排序遇到了一个问题,部分截图如下 我用的是json格式存储数组,想通过排序实现img数组中的内容升序或是降序发现用sort自 ...
- js数组sort排序方法的算法
说明一下,ECMAScript没有定义使用哪种排序算法,各个浏览器的实现方式会有不同.火狐中使用的是归并排序,下面是Chrome的sort排序算法的实现. sort方法源码 DEFINE_METHOD ...
- js中的排序方法
一.冒泡排序 var arr=[22,1,33,19,77]; function bubbleSort(arr){ for(var i=0;i<arr.length-1;i++){ for( ...
- JS基础-----JS中的分支结构及循环结构
[分支结构] 一.if-else结构 1.结构的写法:if(判断条件){ //条件为true时,执行if的{} }else{ //条件为false时,执行else的{} } 2.注意事项 ①else语 ...
- JS基础---->js中ajax的使用
AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术.今天我们就简单的学习一下ajax的使用及过程. ajax的使用 先贴出大致的代码,是请求本地的一个servlet,返回json格 ...
- [妙味JS基础]JS热身运动
知识点总结 获取ID元素 document.getElementById(' ') 事件:鼠标事件.键盘事件.系统事件.表单事件.自定义事件 onclick onmouseout onmouseove ...
随机推荐
- 深度学习笔记(七)SSD 论文阅读笔记
一. 算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法.与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度.针 ...
- shell编程中的循环语句
while循环直接从文件中读取 while read line do command done < filename until循环 until 条件 do command done for循环 ...
- 课程三(Structuring Machine Learning Projects),第一周(ML strategy(1)) —— 0.Learning Goals
Learning Goals Understand why Machine Learning strategy is important Apply satisficing and optimizin ...
- js精度溢出解决方案
一般参数值不能超过16位.如果超出16都是用0替代,导致我们查询不到自己想要的结果. 遇到此问题我们做如下修改 自己写属性 原始的: <a href="javascript:void( ...
- Ribbon使用Hystrix
1.导入依赖spring-cloud-starter-hystrix <dependency> <groupId>org.springframework.cloud</g ...
- ssh的两个小知识
ssh的两个小知识 1. 在ssh客户端启动远程服务器的图形界面程序. 如果你试图在ssh客户端运行远程服务器的一个图形界面程序,比如说执行firefox,此时可能会提示,can not connec ...
- [HEOI2017] 寿司餐厅 + 最大权闭合子图的总结
Description 太长了自己看叭 点这里! Solution 先学一波什么叫最大权闭合子图. 先要明白什么是闭合子图,闭合子图就是给定一个有向图,从中选择一些点组成一个点集V.对于V中任意一个点 ...
- [转]Angular4 自制分页控件
本文转自:https://blog.csdn.net/Junyuan_123/article/details/79486276 过年后第一波,自制的分页控件,可能功能没有 PrimeNG 那么好,但是 ...
- .Net实现微信公众平台开发接口(一) 之 “微信开发配置”
我们只要通过微信官方认证,成为开发者,才能实现微信提供的各种接口,否则即使调用了接口,微信也不会实现推送,功能也无法通过开发模式真正得到实现,所以需要正确配置微信信息,通过微信官方认证,成为开发者才可 ...
- MDK5 新建工程提示报错:Load PDSC Dubug Description faild
File : D:\Keil_v5\ARM\PACK\Keil\STM32F0xx_DFP\2.0.0\Keil.STM32F0xx_DFP.pdsc Sequence : CheckID Conte ...