js编写快速排序

之前一直学的c语言版的数据结构,所以想尝试一下js版的快速排序,发现更有趣。

其实原理都是大同小异的,下面就来介绍一下原理。

1、首先选一个“基准”,一般选中间值比较合适,因为选两头数据都有可能出现最坏的情况。

2、将数组中的数据与“基准”比较,小于“基准”则存放在另一个数组left(左子集)中,大于“基准”则存放在数组right(右子集)中。

3、利用递归函数,将left和right分别重复1和2,每个数组剩下一个元素为止。

举个栗子:

12 93 60 9 34 46 78 2 30

12 9 2 30 34 93 60 46 78

2 12 9 30 34 46 93 60 78

2 9 12 30 34 46 60 93 78

2 9 12 30 34 46 60 78 93

下面是代码:

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html;charset=utf-8">

<script>

function quicksort(arr){

if(arr.length<=1)//判断数组长度,如果小于等于1直接返回输出

return arr;

var pviotIndex=Math.floor(arr.length/2);//取中间元素下标

var pviot=arr.splice(pviotIndex,1)[0];//返回中间元素,并删除原数组中间元素

var left=[];

var right=[];

for(var i=0;i<arr.length;i++){

if(arr[i]<pviot){

left.push(arr[i]);//在left末尾追加小于基准的元素

}else{

right.push(arr[i]);

}

}

return quicksort(left).concat([pviotIndex],quicksort(right));//递归检索比较,并且用concat把左子集、基准和右子集连接起来。

}

</script>

</head>

<body>

</body>

</html>

时间: 2024-12-28 01:02:48

js编写快速排序的相关文章

【前端小小白的学习之路】----&gt;用JS编写一个函数,返回数组中重复出现过的元素

用JS编写一个函数,返回数组中重复出现过的元素,见下面的代码: var arr = [1, 2, 3, 1, 2, 3, 4, 5]; var getRepeat = function (arr) { var obj = {}; for (var i = 0, len = arr.length; i < len; i++) { if (obj[arr[i]] == undefined) { obj[arr[i]] = 1; } else { obj[arr[i]]++; } } for (var

为Node.js编写组件的几种方式

本文主要备忘为Node.js编写组件的三种实现:纯js实现.v8 API实现(同步&异步).借助swig框架实现. 关键字:Node.js.C++.v8.swig.异步.回调. 简介 首先介绍使用v8 API跟使用swig框架的不同: (1)v8 API方式为官方提供的原生方法,功能强大而完善,缺点是需要熟悉v8 API,编写起来比较麻烦,是js强相关的,不容易支持其它脚本语言. (2)swig为第三方支持,一个强大的组件开发工具,支持为python.lua.js等多种常见脚本语言生成C++组件

原生JS编写图片切换效果和点击按钮的样式变化

这两天更进一步的了解了JS,老师让我们用原生的js编写图片切换和改变点击按钮样式,就是让我们学会怎么去把一个问题拆分,怎么将一个大问题拆分成许多的小问题,再用函数封装起来.比如一个点击按钮,让其点击时背景色发生改变,点击另一个时,上一个按钮要变回原来本有的颜色:这个问题用jquery,一行代码就搞定,但是用原生js就得分三个部分来考虑: 1.添加改变背景的样式. 2.怎么获取到除了当前点击的按钮以外其他的兄弟节点. 3.怎么去除按钮的样式属性. 也讲了事件委托,实现了可以删除新添加的元素的功能.

用html和js编写人机象棋对战

内容: 成员: 学号:2015035107221 姓名:刘泽宇 成员: 学号:2015035107212 姓名:周建伟 结对编程项目作业名称:用html和js编写人机象棋对战 选择该结对编程项目原因:方向课学html自我感觉可以,而且在网上还能找到相关的知识.

js实现快速排序

js实现快速排序(in-place)简述 快速排序,又称划分交换排序.以分治法为策略实现的快速排序算法. 本文主要要谈的是利用javascript实现in-place思想的快速排序 分治法: 在计算机科学中,分治法是建基于多项分支递归的一种很重要的算法范式.字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并.(摘自维基百科) 快速排序的思想 数组中指定一个元素作为标尺,比它大的放到该元素后面,比它小的

原生js之道——原生js编写类选择器

一.类选择器的概念 类选择器,就是通过class属性获取节点.比如一个html结构中,有三个p标签都具有class="red"的属性,那么类选择器返回的就是这三个p标签. 在jquery中,我们可以很方便的通过$(".red")这种方式按照类获取节点.但是在原生的javascript中,有getElementById(按照id属性获取元素).getElementsByTagName(按照标签名获取元素)等方法,但是并没有类选择器相关方法.因此,编写原生js实现类选择

js编写验证码

这是一个简单的js编写的验证码,自己已经亲自验证,没有问题了 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head&g

Breach - HTML5 时代,基于 JS 编写的浏览器

Breach 是一款属于 HTML5 时代的开源浏览器项目,,完全用 Javascript 编写的.免费.模块化.易于扩展.这个浏览器中的一切都是模块,Web 应用程序在其自己的进程运行.通过选择合适的模块为您构建自己的浏览体验. 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[附源码下载] 精心挑选的优秀jQuery Ajax分页插件和教程 12款经典的白富美型 jQuery 图片轮播插件 让网站动起来!12款优秀的 jQuery 动画插件 精心挑选的美轮美奂的 jQuery 图片特

Node.js编写be的流程(express)

Node.js编写be的流程 1.当前项目目录下首先安装express 2.自动生成express插件结构 express -e 3.执行完前两步的效果      4.此时的package.json 5.给package.json配置你需要用到的其他插件,这里我配置了 mongoose(数据库):yarn add mongoose moment(时间处理):yarn add moment nodemon(监听自动刷新):yarn add nodemon 原文地址:https://www.cnbl