JavaScript实现快速排序(填坑法)

Posted 十九万里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript实现快速排序(填坑法)相关的知识,希望对你有一定的参考价值。

快速排序的基本思想:

基本思想是通过一趟排序将要排序的数据分割成为独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后在按照此方法对这两部分数据分别进行快速排序,整个过程都可以递归进行,以此来达到整数变成有序序列
代码实现:

// 快速排序 代码实现
function quickSort (array, start,end){
    let length = array.length;
    // 如果不是数组或者数组长度小于等于1 直接返回,不需要排序
    if(!Array.isArray(array) || length <= 1 || start  >= end ) return;

    let index =  partition (array,start, end); // 将数组划分为两部分,并返回右部分的第一个元素的索引值
    quickSort(array,start,index - 1);// 递归排序左半部分
    quickSort(array,index + 1 ,end); //递归排序右半部分
}
function partition(array,start,end){
    let pivot = array[start];//取得第一个值为枢纽值,获取枢纽值得大小

  // 当start等于end指针时结束循环
  while (start < end ){
        // 当end指正指向的值大于等于枢纽值得时候,end指针向前移动
     while(array [end] >= pivot && start < end){
        end--;
    }
    // 将比枢纽值小的值交换到start的位置
    array[start] = array[end];
    // 移动start值,当start指针指向的值小于枢纽值得时候  start指针向后移动
    while(array[start] < pivot && start < end){
        start ++;

    }
    // 将比枢纽值打的值交换到end位置,进入下一次循环中
    array[end ]= array [start];

  }
  // 将枢纽值交换到中间点
  array[start] = pivot;
  //返回中间索引值
  return start;
}

这一种方法是填空发 就是 将第一个位置的数作为枢纽值,然后end指正向前移动,当遇到比枢纽值小的值或者end值等于start值的时候就停止,然后 把这个值填入start的位置。然后start指针向后移动,当遇到比枢纽值大的值或者start值等于end值的时候停止,然后将这个值填入end的位置,反复循环这个过程,知道start的值等于end的值为止,将一开始保留的这个枢纽值填入这个位置,次数枢纽值左边的值都比枢纽值小,枢纽值右边的值都比枢纽值大,然后在递归左右两边的序列。
参考文章:
[算法] 关于快速排序的四种写法

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

快速排序的实现(不保证效率

你不得不看,巨详细王大爷表示都看得懂

要想学好八大排序算法这篇文章你不得不看,巨详细王大爷表示都看得懂

JavaScript算法(归并排序与快速排序)

快速排序-递归实现

快速排序(QuickSort)的Javascript实现