javascript冒泡排序一些新实现
一.冒泡排序
说起冒泡排序,可能每个人都不会陌生,实现思路相当简单明了,就是不停的对数组进行两两比较,将较大(较小)的一项放在前面;
如 var arr = [7, 3, 10, 1, 8, 4, 2, 4, 4, 3] 进行升序排列,排序过程如下
第一次 [3, 7, 1, 8, 4, 2, 4, 4, 3, 10]
第二次 [3, 1, 7, 4, 2, 4, 4, 3, 8, 10]
以此类推 。。。。
结果 [1, 2, 3, 3, 4, 4, 4, 7, 8, 10];

//冒泡排序
function bubbleSort(arr){
var len = arr.length,t
for(j=0;j<=len-1;j++){
for(i=0;i<=len-j-1;i++){
if(arr[i]>arr[i+1]){
t = arr[i+1];
arr[i+1] = arr[i];
arr[i] = t;
}
}
}
return arr;
}

二.快速排序
快速排序也是我们常用到的一种排序方式,核心步骤如下
1.选择中间数。
2.构建两个临时数组,比中间数小的放到左边,大的放到右边
3.对临时数组重复1-2;
例如,我们原始数组为[2,4,1,5,6,3,12,9,7],第一步我们选择第5项 6 为中间数,创建临时数组left,right,则left 结果为[2,4,1,5,3],right 结果为 [12,9,7]。然后再分别对left和right进行相同的操作,直至left及right数组长度为1.
具体代码如下:

//快速排序
function quickSort(arr){
if(arr.length <= 1){ //数组长度为1时,则停止递归
return arr
}
var l = Math.floor(arr.length/2); //选择中间数
var left = [],right=[];
var splitEle = arr.splice(l,1)[0] //将中间数从原数组删除并保存
for(i=0;i<arr.length;i++){
if(arr[i] < splitEle){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return arguments.callee(left).concat(splitEle,arguments.callee(right))
}

三.选择排序
选择排序核心思想如下:
加入我们进行升序排列,我们假设数组第一项为最小值,然后将第一项与其他项分别比较,如果其他项小于第一项,则交换位置,这样第一次循环结束我们可以保证第一项为最小值。然后第二项做类似操作,然后以此类推,具体如下图所示
代码如下:

//选择排序
function selectQuot(arr){
for(i=0; i<arr.length-1; i++){
for(j=i+1;j<arr.length;j++){
if(arr[i] > arr[j]){
var temp;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
return arr
}

javascript冒泡排序一些新实现的更多相关文章
- 使用javascript打开一个新页而不被浏览器屏蔽
使用javascript打开一个新页面可以有几种方式,但各有利弊,以下做下分析 1.window.open(url) 这是新手最常用的方法,好处是简单易用,坏处,很简单,会被很多浏览器拦截而导致功能失 ...
- javascript 冒泡排序算法
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...
- JavaScript ES6 数组新方法 学习随笔
JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...
- javascript一种新的对象创建方式-Object.create()
1.Object.create() 是什么? Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不 ...
- WebKit JavaScript Binding添加新DOM对象的三种方式
一.基础知识 首先WebKit IDL并非完全遵循Web IDL,只是借鉴使用.WebKit官网提供了一份说明(WebKitIDL),比如Web IDL称"operation”(操作), 而 ...
- javascript Object的新方法
今天复习es6,又看到Object的一堆方法,与es5的表现又有不一致,耗费了一整天,整理一下: 前几天在司徒正美的书里又看到了es5 Object的字眼,为了向下兼容,大神们也是牛逼的整理出一系列i ...
- JavaScript&&jQuery创建新节点和操作属性对比
JavaScript创建新节点和操作属性 通过JavaScript原生接口创建节点,在处理上是非常复杂与繁琐的. <!DOCTYPE html> <html lang="e ...
- javascript冒泡排序 至少比较N(N-1)/2次;
<script type="text/javascript"> function get(){ var num = [10,5,2,1,3,6,4,7,9,8]; va ...
- javascript冒泡排序
数组冒泡排序算法(升序) 升序:小数在前,大数在后 冒泡排序的原则:每次比较相邻两个元素,如果前一个数>后一个数,说明违反升序的要求,就将两数交换位置.否则,保持不变.继续比较下一对. 例如:玩 ...
随机推荐
- 团队第二周:SRS文档
项目计划: 对于这次的实验,我们组计划进行一个图书管理系统的项目书写,在第一阶段,对该项目先进行一下规划,总结该项目的注意事项以及实验要求,并加以实施. 下面我先对我们项目的要求坐一下说明: 1定义五 ...
- Spring事务传播机制&隔离级别
一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为.有以下选项可供使用:PROPAGATION_ ...
- elasticsearch-PHP第一天
遇到很大的问题就是,给边做边找原因,看官方文档,全英文看不懂.只能慢慢一步一步去做. 性子太急,真的不行,跨越性太大,卡一个小时多,才发现,连安装都没搞明白. 首先需要一个JAVA环境,上百度 ...
- 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100
出现这个问题的背景是,判断一批激活码在系统中是否已经存在,很傻的一个作法是,把这一批激活码,以in(in (‘ddd‘,‘aaa‘))的形式来处理,导致问题的出现. 后来,查找资料,http://bb ...
- dis进行反编译
摘录自官方文档: https://docs.python.org/2/library/dis.html 回头自己也脑补下. 可以使用dis查看自己代码的复杂度之类的东西. 比如while 1 和whi ...
- ios网络知识
http://www.cocoachina.com/bbs/read.php?tid-31300.html 启蒙内容 http://blog.csdn.net/nono_love_lilith/ar ...
- 在RedHat上安装gcc,java 和 eclipse-rcp
本文全是如何用rpm包在红帽子54上安装gcc,automake,java和eclipse等,不是源代码编译,请大家不要误会了. 其实通过rpm包安装东西很简单,麻烦的是有很多rpm是要根据顺序进行先 ...
- javaEE-----org.springframework.dao.InvalidDataAccessApiUsageException: Write operation
org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read ...
- js jquery实时计算输入字符
在项目中需要倒还可以输入多少字符
- C++开发ArcGis
以下这段时间将主要记录如何使用C++开发ArcGis,包括1.C++的学习:2.GIS的基础知识:3.如何开发三部分,9-3后开始后将持续更新