js 的各种排序算法 -- 待续
function quickSort(arr,l,r){
if(l < r){
var i = l, j = r, x = arr[i];
while(i<j){
while(i<j && arr[j]>x)
j--;
if(i<j)
//这里用i++,被换过来的必然比x小,赋值后直接让i自加,不用再比较,可以提高效率
arr[i++] = arr[j];
while(i<j && arr[i]<x)
i++;
if(i<j)
//这里用j--,被换过来的必然比x大,赋值后直接让j自减,不用再比较,可以提高效率
arr[j--] = arr[i];
}
arr[i] = x;
quickSort(arr, l, i-1);
quickSort(arr, i+1, r);
}
}
<script>
function quickSort(arr,l,r){
//总体思路是, 选第一个 a 作为参考
// 从最后一个往前逐个对比, 如果遇到比a小, 就把这个 c 放在第一位
// 还是 a 作为参考,
// 从第二个往后逐个对比, 如果遇到比 a 大, 就把这个 d 放在 c 开始的位置
// 最后 a 就放在 d的位置,
// 这样 a 左边的都比 a小,
// a右边的都比 a大
if(l < r){
var i = l, j = r, left = arr[i]; //left 3 抽取出第一位的值
// [3,2,6,1, 9,8,6 ]
while(i<j){
// 同时满足
// 对比的坐标在 第一个3的 后面
// 对比的值 大于 3
// 则排除掉
while(i<j && arr[j]> left) //arr[j] 6
j--; // j 6
// 最后 j 为3, arr[j] 为 1
// i 没有变, j在变
if(i<j)
// 填充第一位的值, 3 变成 1, 同时 i 从0 变成 1
arr[i++] = arr[j];
// [1, 2, 6, 1, 9, 8, 6]
// 1 < 3 && 2 < 3
while(i < j && arr[i] < left )
i++;
// 最后 i 为 2
// i 在改变, j没有变化
// 2<3
if(i<j)
// 3 的位置被填充, 变成6, 同时j 变成了 2
arr[j--] = arr[i];
// [1, 2, 6, 6, 9 , 8 ,6 ]
}
//确定中间的值 [1, 2, 3, 6, 9 , 8 ,6 ]
arr[i] = left;
console.log(arr)
// 排序左边的数组
quickSort(arr, l, i-1);
//排序右边的数组
quickSort(arr, i+1, r);
}
}
var arr = [8,5,1,4,6, 9 ,3,8,7, 6, 2 ]
quickSort(arr, 0, arr.length-1)
console.log(arr)
</script>
js 的各种排序算法 -- 待续的更多相关文章
- [ 转载 ] js十大排序算法:冒泡排序
js十大排序算法:冒泡排序 http://www.cnblogs.com/beli/p/6297741.html
- js 十大排序算法 All In One
js 十大排序算法 All In One 快速排序 归并排序 选择排序 插入排序 冒泡排序 希尔排序 桶排序 堆排序(二叉树排序) 基数排序 计数排序 堆排序(二叉树排序) https://www.c ...
- JS写的排序算法演示
看到网上有老外写的,就拿起自已之前完成的jmgraph画图组件也写了一个.想了解jmgraph的请移步:https://github.com/jiamao/jmgraph 当前演示请查看:http:/ ...
- JS家的排序算法
由于浏览器的原生支持(无需安装任何插件),用JS来学习数据结构和算法也许比c更加便捷些.因为只需一个浏览器就能啪啪啪的调试了.比如下图我学习归并排序算法时,只看代码感觉怎么都理解不了,但是结合chro ...
- JS中常见排序算法详解
本文将详细介绍在JavaScript中算法的用法,配合动图生动形象的让你以最快的方法学习算法的原理以及在需求场景中的用途. 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements Java ...
- JS实现常用排序算法—经典的轮子值得再造
关于排序算法的博客何止千千万了,也不多一个轮子,那我就斗胆粗制滥造个轮子吧!下面的排序算法未作说明默认是从小到大排序. 1.快速排序2.归并排序3.冒泡排序4.选择排序(简单选择排序)5.插入排序(直 ...
- js十大排序算法
排序算法说明: (1)对于评述算法优劣术语的说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面:不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面: 内排序:所有排 ...
- JS十种经典排序算法,纯动画演示,学会了怼死面试官!
十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间非比较类排序:不通过比较来决定 ...
- js十大排序算法:冒泡排序
排序算法说明: (1)对于评述算法优劣术语的说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面:不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面: 内排序:所有排 ...
随机推荐
- Flask系列(四)Flask实现简单页面登陆
from flask import Flask,render_template,request,redirect,session app = Flask(__name__,template_folde ...
- ruby on rails validates
validates :conclusion, :presence => true, :inclusion => { :in => [0,1] } validates :email, ...
- Codeforces Round #513 by Barcelona Bootcamp
A. Phone Numbers 签. #include <bits/stdc++.h> using namespace std; #define N 110 char s[N]; ], ...
- 2018 Multi-University Training Contest 5 Solution
A - Always Online Unsolved. B - Beautiful Now Solved. 题意: 给出一个n, k 每次可以将n这个数字上的某两位交换,最多交换k次,求交换后的最大 ...
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest Solution
A:Broadcast Stations 留坑. B:Connect3 题意:四个栈,每次放棋子只能放某个栈的栈顶,栈满不能放,现在给出(1, x) 表示黑子放在第x个栈的第一个位置,白子放在第b个栈 ...
- 浅谈HashMap 的底层原理
本文整理自漫画:什么是HashMap? -小灰的文章 .已获得作者授权. HashMap 是一个用于存储Key-Value 键值对的集合,每一个键值对也叫做Entry.这些个Entry 分散存储在一个 ...
- InstallShieldpro2015 使用教程
1.下载地址:http://pan.baidu.com/s/1pLDCh3H ,如果网盘链接失效,请联系我. 2.解压后双击 3.安装完毕后,运行InstallShieldpro2015,会出现如下提 ...
- POJ 1625 Censored!(AC自动机->指针版+DP+大数)题解
题目:给你n个字母,p个模式串,要你写一个长度为m的串,要求这个串不能包含模式串,问你这样的串最多能写几个 思路:dp+AC自动机应该能看出来,万万没想到这题还要加大数...orz 状态转移方程dp[ ...
- 【eclipse】运行maven项目clean tomcat7:run报错
问题: Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean 解决: 关闭进程javaw.exe,然 ...
- Python学习札记(三十五) 面向对象编程 Object Oriented Program 6
参考:实例属性和类属性 NOTE Python是动态语言,根据类创建的实例可以任意绑定属性. class Student(object): def __init__(self, name): self ...