算法——快速排序(Quicksort)

快速排序的思路:

(1)在数据集中,选择一个元素作为“基准(pivot)”。(基准值可以任意选择,但是选择中间的值比较容易理解)

(2)所有小于“基准”的元素,都移到“基准”的左边,所有大于“基准”的元素,都移到“基准”的右边。

(3)对“基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

快速排序的时间复杂度和空间复杂度:

(1)最优情况下的时间复杂度为O(nlogn);最差情况下的时间复杂度为O(n^2);平均时间复杂度为O(nlogn)。

(2)最优情况下的空间复杂度为O(logn);最差情况下的空间复杂度为O(n)。


实现代码:

function quickSort(arr){
    if(arr.length <=1){return arr;} 
	var pivotIndex=Math.floor(arr.length/2); //将原数组的中间值作为“基准”,获取其索引值
	var pivot=arr.splice(pivotIndex,1)[0]; //从原数组中删除选定的“基准”元素,并将其赋给pivot
	var leftArr=[];
	var rightArr=[];
	for(var i=0;i
测试结果:


附:

(1)内建对象Math的方法:Math.floor(num)取小于或等于指定值num的最大整数。

(2)数组方法arr.splice(start,count,item1,item2,...):在数组中删除或插入元素的方法,前两个参数指定了需要删除从下标为start开始的count个元素,之后的参数从下标为start开始插入。(会改变原数组)
算法——快速排序(Quicksort)_第1张图片

(3)数组方法arr.concat():合并产生一个新数组,参数可取多个,类型不限于数组,也可为数字,字符串等。(不改变原数组)

算法——快速排序(Quicksort)_第2张图片

你可能感兴趣的:(Web前端面试)