快速排序算法在JavaScript中的使用

2020-10-15 11:16发布

情境导入

在如我们学校的计算机专业的刷题网站中,有一个是实时刷题排名,这个网页上的动态实现还是要靠JavaScript的。
其中最常用的,就是快速排序的使用——简便,高效。

实际分析

“快速排序"的思想很简单,整个排序过程只需要三步:
  (1)在数据集之中,选择一个元素作为"基准”(pivot)。
  (2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
  (3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

举例来说,现在有一个数据集{85, 24, 63, 45, 17, 31, 96, 50},怎么对其排序呢?
第一步,选择中间的元素45作为"基准"。(基准值可以任意选择,但是选择中间的值比较容易理解。)——这里,你有没有想到“二分法”?
第二步,按照顺序,将每个元素与"基准"进行比较,形成两个子集,一个"小于45",另一个"大于等于45"。
第三步,对两个子集不断重复第一步和第二步,直到所有子集只剩下一个元素为止。

具体实施

第一步,定义一个quickSort函数,它的参数是一个数组。

var quickSort=function(arr){
};12

(以下的东西在大括号里写的)
然后,检查数组的元素个数(保证数组存在)。

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

接着,选择一个“基准”,并将其与原数组分离,再定义两个空数组,一左一右,用来存放相应数据。

var pivotIndex=Math.floor(arr.length/2);
var pivot=arr.splice(pivotIndex,1)[0];   //分离指定数据
var left=[];
var right=[];1234

(
这里插一句,中间第二行有个splice,可能有的人已经想到了java中的spilt函数——一个API函数,作用是按照其后定义的符号分割整个字符串,在如身份证的判断,读取文件中数据等等地方很有用处(具体见令人着迷的split
)

split和splice在使用形式上的区别:
splice:从指定位置开始截取,截取指定长度 —— 抽离字符串中指定数据
split:将字符串按指定符号分割成一个数组 ——分割字符串

然后,开始遍历数组,放入数据,并递归遍历,以防缺漏:

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

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

在使用的时候,直接调用quickSort()函数即可。

中括号的意义

[ ]——中括号,表示一个数组,也可以理解为一个数组对象。
如:var LangShen = [ “Name”,“LangShen”,“AGE”,“28” ];
很明显,每个值或函数,都是独立的,多个值之间只用,(逗号)隔开,因为是数组对象,所以它等于:
var LangShen = Array( “Name”,“LangShen”,“AGE”,“28” );
访问时,也是和数组一样,alert( LangShen[0] );


作者:行舟客

链接:https://blog.csdn.net/qq_43624878/article/details/89490256

来源:CSDN
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。