美文网首页
js快速排序

js快速排序

作者: 初晨的风儿 | 来源:发表于2019-10-23 17:04 被阅读0次

整体步骤:
① 选取待排序数组中其中一个数作为基数(建议选取第一个数),使flag等于基数的下标,left等于待排序数组第一个数的下标,right等于待排序数组最后一个数的下标。
② 将数组中比基数小的数放到它的左边,比基数大的数放到它的右边。
③ 将基数左边的数组作为待排序数组,重复①步骤。
④ 将基数右边的数组作为待排序数组,重复①步骤。
⑤ 直到left >= right,代表数组已经划分为最小单位(待排序数组长度小于等于1),即该部分排序完毕,无需继续分割数组。

/**
 * 快速排序
 * @param  num 待排序数组
 */
function quickSort(num) {
    _quickSort(num, 0, num.length - 1); // 将整个num数组快速排序,left和right分别指向数组左右两端。
}
/**
 * 快速排序(递归)
 * @param num 待排序数组
 * @param left 左指针
 * @param right 右指针
 */
function _quickSort(num, left, right) {
    if (left >= right) return; // 若左右指针相遇,待排序数组长度小宇1,即递归的终点,return(注意不能写成left==right,这里left是有可能大于right的)。
    var i = left, j = right, flag = left; // 定义可移动的左右指针 i,j,定义flag为基数下标。
    while (i < j) { // 在i<j时不断循环,i一旦与j碰头,则跳出循环。
        while (num[j] >= num[flag] && j > flag) j--; // j不断左移,找到在num[flag]右侧且比它大的数。
        if (i >= j) {
            break; // 由于j可能已被改变,需再次判断i与j是否碰头。
        }
        while (num[i] <= num[flag] && i < j) i++; // i不断右移,找到且比基数小的数,且i不能与j碰头。(由于两次交换已合并,此处不需要使得i在flag左侧)
        // num[flag] num[j] num[i]三者换位,可用ES6语法糖[num[flag],num[j],num[i]] = [num[j],num[i],num[flag]];
        let temp = num[flag]; 
        num[flag] = num[j];
        num[j] = num[i];
        num[i] = temp
        flag = i; // 基数已经在原num[i]的位置,flag同时也要赋值成i。
    }
    _quickSort(num, left, flag - 1); // 将flag左边数组作为待排序数组,递归调用。
    _quickSort(num, flag + 1, right); // 将flag右边数组作为待排序数组,递归调用。
}

相关文章

  • js排序 - 快速排序

    (1)在数据集之中,选择一个元素作为"基准"(pivot)。 (2)所有小于"基准"的元素,都移到"基准"的左边;...

  • js 快速排序

    quickSort(arr){if(arr.length<=1){return arr}var povitInde...

  • JS———快速排序

    function sorts(arr){ if(arr.length<=1){ return arr } var...

  • JS快速排序

    前言 这两天看到阮一峰前辈的快排引起的一系列事件...(居然DDOS都出来了),前端界又被顺路diss了一番,想起...

  • JS快速排序

  • JS快速排序

    从数组中选取一个数据作为基准,一般默认数组中第一个数据,然后比基准小的放到左侧,比基准大的放到右侧完成第一轮后分割...

  • js快速排序

    首先了解什么是快速排序。 1、找到一个基准值(一般是中间位)2、然后将数组的值与基准值比较,分为两个数组(比基准值...

  • 快速排序(JS)

    快速排序是处理大数据集最快的排序算法之一。它是一种分而治之的算法,通过递归的方式将数据依次分解为包含较小元素和较大...

  • JS快速排序

  • js快速排序

    整体步骤:① 选取待排序数组中其中一个数作为基数(建议选取第一个数),使flag等于基数的下标,left等于待排序...

网友评论

      本文标题:js快速排序

      本文链接:https://www.haomeiwen.com/subject/xvqwuctx.html