JavaScript中快速排序的案例

  

JavaScript中快速排序的案例?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!

介绍

排序是指以特定顺序(数字或字母)排列线性表的元素。排序通常与搜索一起配合使用。

有许多排序算法,而迄今为止最快的算法之一是<强>快速排序(快速排序)

快速排序用分治策略对给定的列表元素进行排序。这意味着算法将问题分解为子问题,直到子问题变得足够简单可以直接解决为止。

从算法上讲,这可以用递归或循环实现。但是对于这个问题,用递归法更为自然。

了解快速排序背后的逻辑

先看一下快速排序的工作原理:

    <李>在数组中选择一个元素,这个元素被称为<>强基准(主)强。通常把数组中的第一个或最后一个元素作为基准。 <李>然后,重新排列数组的元素,以使基准左侧的有元素都小于基准,而右侧的所有元素都大于基准。这一步称为<>强分区强。如果一个元素等于基准,那么在哪一侧都无关紧要。 <李>针对基准的左侧和右侧分别重复这一过程,直到对数组完成排序。

接下来通过一个例子理解这些步骤。假设有一个含有未排序元素<代码>[7,2、4、1、6 5 0,4、2]>

 JavaScript中快速排序的案例

在算法的步骤1中被选为基准的元素带颜色。分区后,基准元素始终处于数组中的正确位置。

黑色粗体边框的数组表示该特定递归分支结束时的样子,最后得到的数组只包含一个元素。

最后可以看到该算法的结果排序。

用JavaScript实现快速排序

这一算法的主干是“分”区步骤。无论用递归还是循环的方法,这个步骤都是一样的。

正是因为这个特点,首先编写为数组分区的代码<代码>分区():

函数quickSortRecursive(加勒比海盗,开始,结束){//终止条件
  如果(开始祝辞=结束){
  返回;
  }//返回pivotIndex
  让指数=分区(加勒比海盗,开始,结束);//将相同的逻辑递归地用于左右子数组
  快速排序(加勒比海盗,开始,指数- 1);
  快速排序(加勒比海盗,指数+ 1,);
  }

在这个函数中首先对数组进行分区,之后对左右两个子数组进行分区。只要这个函数收到一个不为空或有多个元素的数组,则将重复该过程。

空数组和仅包含一个元素的数组被视为已排序。

最后用下面的例子进行测试:

阵列=[7,2、4、1、6 5 0,4、2]
  quickSortRecursive(数组,0,数组。长度- 1)
  
  console.log(数组)

输出:

 4 2 0,1,2,4,5,6,7 
循环实现

快速排序的递归方法更加直观。但是用循环实现快速排序是一个相对常见的面试题。

与大多数的递归到循环的转换方案一样,最先想到的是用栈来模拟递归调用。这样做可以重用一些我们熟悉的递归逻辑,并在循环中使用。

我们需要一种跟踪剩下的未排序子数组的方法。一种方法是简单地把“成对”的元素保留在堆栈中,用来表示给定未排序子数组的开始<代码> 和<代码>

JavaScript没有显式的栈数据结构,但是数组支持<代码> push() 和<代码> pop()

JavaScript中快速排序的案例