js实现快速排序的方法

Posted 疾风_剑豪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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++){  
            if(arr[i]>arr[j]){/*如果前面的数据比后面的大就交换位置*/ 
                var list=arr[i];  
                arr[i]=arr[j];  
                arr[j]=list;  
            }   
        }  
    }   
    return arr;  
}  
Sort([10,10,1,2,4,6,7,89,7,4])
输出结果

 下面我们来说说第二种方法,这方法是我浏览阮一峰老师日志看到的,这种方法的效率会高很多,具体选哪种,看情况吧!

var quickSort = function(arr) {
  if (arr.length <= 1) {//如果数组长度小于等于1无需判断直接返回即可  
	 	return arr;
	}
  var pivotIndex = Math.floor(arr.length / 2);//取基准点  
  var pivot = arr.splice(pivotIndex, 1)[0];//取基准点的值,splice(index,1)函数可以返回数组中被删除的那个数
  var left = [];//存放比基准点小的数组
  var right = [];//存放比基准点大的数组  
  for (var i = 0; i < arr.length; i++){ //遍历数组,进行判断分配  
    if (arr[i] < pivot) {
      left.push(arr[i]);//比基准点小的放在左边数组  
    } else {
      right.push(arr[i]);//比基准点大的放在右边数组  
    }
  }
		 //递归执行以上操作,对左右两个数组进行操作,直到数组长度为<=1;  
  return quickSort(left).concat([pivot], quickSort(right));
};
使用的时候,直接调用quickSort()就行了。

  

要是这些注释你看了还不理解的话,那么,可以去看看阮一峰老师的日志,链接http://www.ruanyifeng.com/blog/2011/04/quicksort_in_javascript.html

 

要是还有其他方法的话,求告知,谢谢!

 

以上是关于js实现快速排序的方法的主要内容,如果未能解决你的问题,请参考以下文章

js实现快速排序的方法

js实现快速排序

js实现数组去重的三个方法数组的快速排序

十大排序总结(js实现稳定性内外部排序区别时间空间复杂度冒泡快速直接选择堆直接插入希尔桶基数归并计数排序)

JS排序--快速排序

堆排序 js实现