javascript实现快速排序算法

忘记了快速排序的思路是怎样的了,复习一下,写了两个实例,发表博文备忘。

对于快速排序的思想,可以参考白话经典算法系列之六 快速排序 快速搞定,讲得比较通俗

prototype扩展的方式

12345678910111213141516171819202122232425262728293031323334
/** * 对Array对象的原型扩展来实现快速排序 * @param [left]  排序开始位置 * @param [right]  排序结束位置 * @returns {Array} */Array.prototype.quickSort = function(left, right){    if(left === undefined)   left = 0;      //若left和right为空,设置初始值    if(right === undefined)   right = this.length - 1;    if(left < right){        var ref = this[left];        var low = left;        var high = right;        while(low < high){            //从右往左查询比ref小的值            while(low < high && this[high] > ref){                --high;            }            this[low] = this[high];            //从左往右查询比ref大的值            while(low < high && this[low] < ref){                ++low            }            this[high] = this[low];        }        this[low] = ref;        this.quickSort(low+1, right);        this.quickSort(left, low-1);    }    return this;};

var arr1 = [95,8,65,98,54,25,3,654,4,74,63,88,35,68];console.log(arr1.quickSort());

非prototype方式

12345678910111213141516171819202122232425
/** * @param array //要排序的数组 * @returns {Array} //排完序的数组 */var quicksort = function(array){    if(!array.length)   return array;    var low = 0;    var high = array.length - 1;    var ref = array[low];    while(low < high){        while(low < high && array[high] > ref){            --high;        }        array[low] = array[high];        while(low < high && array[low] < ref){            ++low        }        array[high] = array[low];    }    array[low] = ref;    return quicksort(array.slice(0,low)).concat([ref],quicksort(array.slice(low+1, array.length)));};

var arr2 = [95,8,65,98,54,25,3,654,4,74,63,88,35,68];console.log(quicksort(arr2));

原文:大专栏  javascript实现快速排序算法

原文地址:https://www.cnblogs.com/sanxiandoupi/p/11658773.html

时间: 2024-10-30 13:59:26

javascript实现快速排序算法的相关文章

快速排序算法的 JavaScript 实现

快速排序是一种在大多数情况下比冒泡排序效率更高(详情参考有关算法复杂度的文章)的算法. 注意:许多编程语言内置的排序 API 底层实现便是基于快速排序. ES5 与 ES6 语法在实现该算法时区别不大,以下仅提供 ES5 版本. function quickSort(arr) { var len = arr.length; if (len <= 1) { return arr.slice(0); // 注意用 slice 可防范 arr[0] 为 undefined } var left = [

JavaScript 数据结构与算法之美 - 归并排序、快速排序、希尔排序、堆排序

1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 之所以把归并排序.快速排序.希尔排序.堆排序放在一起比较,是因为它们的平均时间复杂度都为 O(nlogn). 请大家带着问题:快排和归并用的都是分治思想,递推公式和递归代码也非常相似,那它们的区别在哪里呢 ? 来阅读下文. 2. 归并排序(Merge Sort) 思想 排序一个数

【JavaScript】【算法】JavaScript版排序算法

JavaScript版排序算法:冒泡排序.快速排序.插入排序.希尔排序(小数据时,希尔排序会比快排快哦) 1 //排序算法 2 window.onload = function(){ 3 var array = [0,1,2,44,4, 4 324,5,65,6,6, 5 34,4,5,6,2, 6 43,5,6,62,43, 7 5,1,4,51,56, 8 76,7,7,2,1, 9 45,4,6,7,8]; 10 //var array = [4,2,5,1,0,3]; 11 array

javascript常用排序算法实现

毕业后,由于工作中很少需要自已去写一些排序,所以那些排序算法都忘得差不多了,不过排序是最基础的算法,还是不能落下啦,于是找了一些资料,然后用Javascript实现了一些常用的算法,具体代码如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>

javascript常用经典算法实例详解

javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与使用技巧,需要的朋友可以参考下 本文实例讲述了javascript常用算法.分享给大家供大家参考,具体如下: 入门级算法-线性查找-时间复杂度O(n)--相当于算法界中的HelloWorld ? 1 2 3 4 5 6 7 8 9 10 //线性搜索(入门HelloWorld) //A为数组,x为要

javascript数据结构和算法 零(前记+序言)

前记 这本书Data Structure and Algorithm with Javascript 我将其翻译成<< javascript 数据结构和算法>> 为什么这么翻译?而不是翻译成"用javascript实现数据结构和算法" 原因有二: 一个,我觉的它更加简洁,第二个,我是想强调我们在这里使用的是javascript. 我不喜欢一些翻译的人把一个简单的语句进行加工,搞得晦涩难懂.我更喜欢外国人写书的 那种原汁原味.同样,我很喜欢外国人的那种分享精神,它

Web高级 JavaScript中的算法

算法 排序算法 稳定排序 待排序序列中相等元素在排序完成后,原有先后顺序不变. 非稳定排序 有序度 待排序序列中有序关系的元素对个数. 逆序度 1. 插入排序 遍历有序数组,对比待插入的元素大小,找到位置.把该位置后的元素依次后移. 时间复杂度: O(N2) 2. 选择排序 区分已排序区间和未排序区间,每次从未排序区间选择最小的放在已排序区间的最后. 时间复杂度: O(N2) 3. 归并排序 将待排序元素从中间分为二半,对左右分别递归排序,最后合并在一起. 思想: 分治思想 时间复杂度: O(n

JavaScript 数据结构与算法之美 - 冒泡排序、插入排序、选择排序

1. 前言 算法为王. 想学好前端,先练好内功,只有内功深厚者,前端之路才会走得更远. 笔者写的 JavaScript 数据结构与算法之美 系列用的语言是 JavaScript ,旨在入门数据结构与算法和方便以后复习. 之所以把冒泡排序.选择排序.插入排序放在一起比较,是因为它们的平均时间复杂度都为 O(n2). 请大家带着问题:为什么插入排序比冒泡排序更受欢迎 ?来阅读下文. 2. 如何分析一个排序算法 复杂度分析是整个算法学习的精髓. 时间复杂度: 一个算法执行所耗费的时间. 空间复杂度:

javascript数据结构与算法--二叉树(插入节点、生成二叉树)

javascript数据结构与算法-- 插入节点.生成二叉树 二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 /* *二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中 * * * */ /*用来生成一个节点*/ function Node(data, left, right) { this.data = data;//节点存储的数据 this.left = left; this.right = right; this.show = show; } function sh