用JS实现快速排序

1 找一个基准点

2 建立两个数组,分别存放左边数组和右边数组

3 利用递归进行下次比较

function quickSort(arr){

    if(arr.length<=1){
        return arr;
    }

    var num = Math.floor(arr.length/2);

    var numValue = arr.splice(num,1);

    var left = [];
    var right = [];

    for(var i=0;i<arr.length;i++){
        if(arr[i]<numValue){
            left.push(arr[i]);
        }
        else{
            right.push(arr[i]);
        }
    }

    return quickSort(left).concat([numValue],quickSort(right));

}

alert(quickSort([12,5,37,6,22,40]));
时间: 2024-10-02 09:25:08

用JS实现快速排序的相关文章

js实现快速排序

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

js编写快速排序

之前一直学的c语言版的数据结构,所以想尝试一下js版的快速排序,发现更有趣. 其实原理都是大同小异的,下面就来介绍一下原理. 1.首先选一个“基准”,一般选中间值比较合适,因为选两头数据都有可能出现最坏的情况. 2.将数组中的数据与“基准”比较,小于“基准”则存放在另一个数组left(左子集)中,大于“基准”则存放在数组right(右子集)中. 3.利用递归函数,将left和right分别重复1和2,每个数组剩下一个元素为止. 举个栗子: 12 93 60 9 34 46 78 2 30 12

js实现快速排序(in-place)简述

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

JS排序--快速排序

用 JavaScript 实现快速排序代码如下: 1 /* 2 * @author liphong 3 * @data 2019/02/24 4 */ 5 6 var arr = []; // 需要被排序数组 7 8 /* 9 * 分离函数:实现参考数组中左边部分比参考值小,右边部分比参考值大 10 * @param left, right {Number, Number} 数组头.尾的下标值 11 * @return left {Number} 数组参考值最后的位置下标值 12 */ 13 f

js数组快速排序

<script type="text/javascript"> var arr = [1, 2, 3, 54, 22, 1, 2, 3]; function quick(arr) { if (arr.length <= 1) return arr; var proiindex = Math.floor(arr.length / 2); var proift = arr.splice(proiindex, 1)[0]; //找基准,并把基准从原数组删除 var left

使用JS实现快速排序

大致分三步: 1.找基准(一般是以中间项为基准) 2.遍历数组,小于基准的放在left,大于基准的放在right 3.递归 function quickSort(arr){ //如果数组<=1,则直接返回 if(arr.length<=1){return arr;} var pivotIndex=Math.floor(arr.length/2); //找基准,并把基准从原数组删除 var pivot=arr.splice(pivotIndex,1)[0]; //定义左右数组 var left=

js数组快速排序/去重

数组的排序 var arr = []; for(var i=0;i<20;i++){      arr.push(Math.floor(Math.random()*100))  }  //生成一个无序的arr数组  function sort(arr,start,end){      //数组长度为1      if(start == end ){          return [arr[start]]      }else if(start == end-1){          //数组长

js实现快速排序的方法

因为面试面到了这个问题,所以写一下,加深印象,有两种方法 第一种是通过两个for循环,每一次对比相邻两个数据的大小,小的排在前面,如果前面的数据比后面的大就交换这两个数的位置,这个方法就是比较次数太多了,效率比价低. 我只是传入了一个10位数的数组,如果是上万或者更大的数据,不知道您的电脑会不会蓝屏了,嘿嘿,你可以试试哦! var Sort=function(arr){ for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length;j+

JS实现快速排序算法

以下贴出两种实现方式,结果一样,但有些许的差别: 第一种: 1 <script type="text/javascript"> 2 var arr=[6,7,8,3,4,5,9]; 3 function quicksort(left,right){ 4 if(left>right){ 5 return ; 6 } 7 var temp=0; 8 var i=right; 9 var j=left; 10 temp=arr[left]; 11 while(arr[i]&