js 中的快速排序算法简单实现
对于快速排序,最早是在c++中看到,它是利用指针来交换顺序,其实无论哪种语言,原理 和 思想都是一样,然而真正用起来的时候就特别容易忽略一些事实,导致实现失败。废话少说,下面用js实现一下快速排序:
基本算法是 找出一个基准值,小于基准值的放在左边,大于基准值的放在右边。然后重复这个算法,直至数组的长度为小于等于1.
第一遍代码如下:
var quickSort = function (arr){
if(arr.length <=1) {return arr;}
var left = [];
var right = [];
var standIndex = Math.floor(arr.length/2);
var standNum = arr[standIndex];
for(var i=0; i<arr.length; i++){
if(arr[i] < standNum){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat(quickSort(right));
}
结果呢,可能如你所料,直接崩溃了,郁闷至极啊,找了好久的错误,幡然醒悟,特么的 ,已经被当作基准的值竟然又一次参与排序了,结果就悲剧了。
再次修正代码如下:(认真看改动的地方)
var quickSort = function (arr){
if(arr.length <=1) {return arr;}
var left = [];
var right = [];
var standIndex = Math.floor(arr.length/2);
var standNum = arr[standIndex];
for(var i=0; i<arr.length; i++){
if(arr[i] < standNum){
left.push(arr[i]);
}else if(arr[i] > standNum){
right.push(arr[i]);
}
}
return quickSort(left).concat([standNum], quickSort(right));
}
js 中的快速排序算法简单实现的更多相关文章
- JS中常见排序算法详解
本文将详细介绍在JavaScript中算法的用法,配合动图生动形象的让你以最快的方法学习算法的原理以及在需求场景中的用途. 有句话怎么说来着: 雷锋推倒雷峰塔,Java implements Java ...
- js中如何以最简单的方式将数组元素添加到对象中
//如题,通常做法就是循环数组,最后在添加length属性,如: var obj = {}; var pushArr = [11,22,33,44,55,66]; for(var i=0;i<p ...
- JS中的 new 操作符简单理解
首先上一一个简单的 new 操作符实例 var Person = function(name){ this.name = name; this.say = function(){ return &qu ...
- JS中实现A*算法寻路
<html><head><title>use A* to find path...</title></head><body style ...
- js中常用的算法排序
在工作中都会经常用到的一些基础算法,可以很快解决问题.这些都是在工作中总结的,希望可以帮助到大家. 一.数组乱序 arr.sort(function randomsort(a, b) { return ...
- JS中的排序算法-冒泡排序解析
冒泡排序算法 例子:10,8,9,6,4,20,5 从小到大排序 第一轮 1)10>8 交换数据 得到:8,10,9,6,4,20,5 2)10>9 交换数据 得到:8,9,10, ...
- JS中回调函数的简单用法
a能拿b,b能拿到c,c能拿到d,实现a拿到d的东西. function a() { b(function (data) { console.log(data); }); } function b(c ...
- js中trim函数的简单实现
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...
- js 中的算法题,那些经常看到的
js中遇到的算法题不是很多,可以说基本遇不到.但面试的时候,尤其是一些大公司,总是会出这样那样的算法题,考察一个程序员的逻辑思维能力.如下: 1.回文. 回文是指把相同的词汇或句子,在下文中调换位置或 ...
随机推荐
- XIB——AutoLayout添加约束
仿QQ登录界面: 说明:以下各图背景红色只是方便看清楚: 1.创建工程:创建xib文件,不会,可看上上上篇:初识xib: 2.打开xib文件: (1).创建头像: 拖控件:uiimageview--& ...
- [No0000AF]去除wpf窗口标题栏ICON
/* #region 去除标题栏ICON [DllImport("user32.dll")] static extern int GetWindowLong(IntPtr hwnd ...
- [bzoj2588][count on a tree] (主席树+lca)
Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...
- PAT 1046. 划拳(15)
划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输 ...
- [LeetCode] Odd Even Linked List 奇偶链表
Given a singly linked list, group all odd nodes together followed by the even nodes. Please note her ...
- [LeetCode] Course Schedule II 课程清单之二
There are a total of n courses you have to take, labeled from 0 to n - 1. Some courses may have prer ...
- C#进阶系列——WebApi 身份认证解决方案:Basic基础认证
前言:最近,讨论到数据库安全的问题,于是就引出了WebApi服务没有加任何验证的问题.也就是说,任何人只要知道了接口的url,都能够模拟http请求去访问我们的服务接口,从而去增删改查数据库,这后果想 ...
- WinRAR5.4
Winrar是一款优秀的压缩解压工具! 免费版 :http://www.winrar.com.cn/ ###加载启动广告,支持正版 海阔天空:http://pan ...
- 43. Multiply Strings
/** * @param {string} num1 * @param {string} num2 * @return {string} */ var multiply = function(num1 ...
- layer.open打开iframe页面的调用父页面方法及关闭
//调用父类方法 window.parent.exportData($('#shownum').val(),$('#splitstr').val()); //关闭iframe页面var index = ...