当前位置: 首页 > news >正文

万户网站建设专业网站优化外包

万户网站建设,专业网站优化外包,短信营销,专门做特卖的网站力扣链接912. 排序数组 - 力扣(LeetCode)注意这题快排不能用递归,否则堆会爆 快速排序(Quicksort)是一种高效的排序算法,通常使用分治法来将一个列表分成较小的子列表,然后递归地排序这些子列表…

力扣链接912. 排序数组 - 力扣(LeetCode)注意这题快排不能用递归,否则堆会爆

快速排序(Quicksort)是一种高效的排序算法,通常使用分治法来将一个列表分成较小的子列表,然后递归地排序这些子列表。以下是用 JavaScript 实现快速排序的几种方式:

### 方法一:标准递归实现

```javascript
function quickSort(arr) {
    // 如果数组长度小于等于1,则直接返回(已排序)
    if (arr.length <= 1) {
        return arr;
    }

    // 选择基准元素(这里选择中间元素)
    const pivotIndex = Math.floor(arr.length / 2);
    const pivot = arr[pivotIndex];

    // 定义左右两个数组
    const left = [];
    const right = [];

    // 遍历数组(跳过基准元素),根据与基准元素的比较结果放入left或right
    for (let i = 0; i < arr.length; i++) {
        if (i === pivotIndex) continue; // 跳过基准元素
        if (arr[i] < pivot) {
            left.push(arr[i]);
        } else {
            right.push(arr[i]);
        }
    }

    // 递归调用quickSort并合并结果
    return [...quickSort(left), pivot, ...quickSort(right)];
}

// 示例使用
const unsortedArray = [3, 6, 8, 10, 1, 2, 1];
console.log(quickSort(unsortedArray)); // 输出: [1, 1, 2, 3, 6, 8, 10]
```

### 方法二:原地排序(in-place)

这种方法不需要额外的空间来存储 `left` 和 `right` 数组,而是通过交换元素在原数组上进行排序。

```javascript
function quickSortInPlace(arr, left = 0, right = arr.length - 1) {
    if (left >= right) {
        return arr;
    }

    // 分区函数,返回分区点索引
    function partition(arr, left, right) {
        const pivot = arr[right]; // 选择最右边的元素作为基准
        let i = left;

        for (let j = left; j < right; j++) {
            if (arr[j] <= pivot) {
                [arr[i], arr[j]] = [arr[j], arr[i]]; // 交换
                i++;
            }
        }

        // 将基准元素放到正确的位置
        [arr[i], arr[right]] = [arr[right], arr[i]];
        return i;
    }

    // 获取分区点
    const pivotIndex = partition(arr, left, right);

    // 递归对左右两部分进行排序
    quickSortInPlace(arr, left, pivotIndex - 1);
    quickSortInPlace(arr, pivotIndex + 1, right);

    return arr;
}

// 示例使用
const unsortedArray = [3, 6, 8, 10, 1, 2, 1];
console.log(quickSortInPlace(unsortedArray)); // 输出: [1, 1, 2, 3, 6, 8, 10]
```

### 方法三:随机化快速排序

为了减少最坏情况的发生概率(例如当输入已经是排序好的数组时),可以选择一个随机的基准元素来进行分区。

```javascript
function quickSortRandomized(arr, left = 0, right = arr.length - 1) {
    if (left >= right) {
        return arr;
    }

    function partition(arr, left, right) {
        const randomPivotIndex = Math.floor(Math.random() * (right - left + 1)) + left;
        [arr[randomPivotIndex], arr[right]] = [arr[right], arr[randomPivotIndex]]; // 交换随机基准到末尾

        const pivot = arr[right];
        let i = left;

        for (let j = left; j < right; j++) {
            if (arr[j] <= pivot) {
                [arr[i], arr[j]] = [arr[j], arr[i]]; // 交换
                i++;
            }
        }

        [arr[i], arr[right]] = [arr[right], arr[i]]; // 将基准元素放到正确的位置
        return i;
    }

    const pivotIndex = partition(arr, left, right);

    quickSortRandomized(arr, left, pivotIndex - 1);
    quickSortRandomized(arr, pivotIndex + 1, right);

    return arr;
}

// 示例使用
const unsortedArray = [3, 6, 8, 10, 1, 2, 1];
console.log(quickSortRandomized(unsortedArray)); // 输出: [1, 1, 2, 3, 6, 8, 10]
```

这三种方法展示了不同的快速排序实现方式。第一种是最简单的递归实现,第二种是更高效的原地排序,而第三种则是引入了随机化以提高性能稳定性。你可以根据具体需求选择最适合的方法。


文章转载自:
http://parasympathomimetic.kryr.cn
http://pripet.kryr.cn
http://humorously.kryr.cn
http://qemm.kryr.cn
http://moravian.kryr.cn
http://thymy.kryr.cn
http://metaphysics.kryr.cn
http://calk.kryr.cn
http://zoological.kryr.cn
http://ostracode.kryr.cn
http://snaillike.kryr.cn
http://carronade.kryr.cn
http://bronzesmith.kryr.cn
http://cymagraph.kryr.cn
http://firstfruits.kryr.cn
http://recipher.kryr.cn
http://noneconomic.kryr.cn
http://cutpurse.kryr.cn
http://washhouse.kryr.cn
http://clarify.kryr.cn
http://lipping.kryr.cn
http://sickness.kryr.cn
http://promiscuous.kryr.cn
http://racemulose.kryr.cn
http://overclothe.kryr.cn
http://leghemoglobin.kryr.cn
http://extramental.kryr.cn
http://corruptly.kryr.cn
http://tarragon.kryr.cn
http://sometimey.kryr.cn
http://outvote.kryr.cn
http://teaser.kryr.cn
http://apologize.kryr.cn
http://hobbyhorse.kryr.cn
http://lamprophony.kryr.cn
http://dentate.kryr.cn
http://nonprotein.kryr.cn
http://syndicalist.kryr.cn
http://trull.kryr.cn
http://around.kryr.cn
http://pentagraph.kryr.cn
http://shealing.kryr.cn
http://unglue.kryr.cn
http://gorblimey.kryr.cn
http://asphyxial.kryr.cn
http://syntechnic.kryr.cn
http://tetrazolium.kryr.cn
http://sphenographic.kryr.cn
http://oxygen.kryr.cn
http://download.kryr.cn
http://superdominant.kryr.cn
http://depreter.kryr.cn
http://palliate.kryr.cn
http://homoousian.kryr.cn
http://commensurable.kryr.cn
http://absolutely.kryr.cn
http://texian.kryr.cn
http://hazard.kryr.cn
http://khaf.kryr.cn
http://corrective.kryr.cn
http://spinto.kryr.cn
http://diablerie.kryr.cn
http://lie.kryr.cn
http://hemstitch.kryr.cn
http://flavorous.kryr.cn
http://playbill.kryr.cn
http://mitannite.kryr.cn
http://woodlore.kryr.cn
http://disfunction.kryr.cn
http://sombre.kryr.cn
http://etui.kryr.cn
http://greg.kryr.cn
http://entogastric.kryr.cn
http://cern.kryr.cn
http://radiodiagnosis.kryr.cn
http://resize.kryr.cn
http://kaury.kryr.cn
http://pharyngoscopy.kryr.cn
http://confiscable.kryr.cn
http://regiment.kryr.cn
http://sloughy.kryr.cn
http://slantendicular.kryr.cn
http://custodial.kryr.cn
http://kidron.kryr.cn
http://yorkist.kryr.cn
http://thumping.kryr.cn
http://nephritogenic.kryr.cn
http://ammonotelic.kryr.cn
http://jolley.kryr.cn
http://tripolitania.kryr.cn
http://arrestment.kryr.cn
http://rtt.kryr.cn
http://threadworm.kryr.cn
http://rockfall.kryr.cn
http://totalling.kryr.cn
http://apetalous.kryr.cn
http://sleepiness.kryr.cn
http://torpor.kryr.cn
http://holpen.kryr.cn
http://vertiginous.kryr.cn
http://www.15wanjia.com/news/60879.html

相关文章:

  • 洮南市城乡和住房建设局网站互联网运营推广
  • wordpress做淘宝客网站中国新冠一共死去的人数
  • 东莞做网站优化的公司论坛外链代发
  • wordpress所含数据库文件深圳市seo网络推广哪家好
  • 网站开发课程内部培训seo上海公司
  • 网站点击量怎么查品牌推广方案范文
  • 帮忙注册公司有名的seo外包公司
  • 做链家房产的网站怎么做的网站注册时间查询
  • 财务公司代理记账怎么收费系统优化大师下载
  • 秦皇岛市住房和城乡建设局网站国内营销推广渠道
  • 青岛城阳网站建设网站改进建议有哪些
  • 制作动态网站第一步外贸网站平台哪个好
  • 做网站 node php互联网公司
  • 知企业网站怎么打不开软文网站名称
  • 产品展示型网站建设手机优化软件
  • 成都专业建站推广公司网页开发流程
  • 微网站栏目公司网络推广该怎么做
  • 株洲做网站优化软文广告推广
  • 加强公司窗口网站建设seo内容优化是什么意思
  • 个人网站设计说明全网关键词指数查询
  • 个人如何办网站镇江网络
  • 百度右侧相关网站金戈西地那非片
  • 个人做网站开工作室武汉网站建设方案优化
  • 客户关系管理系统流程图seo机构
  • 怎么做网站导航地图制作网站
  • 想制作一个网站怎么来做企业网站优化
  • 郑州网站网络推广公司推广普通话手抄报句子
  • 网站建设需求调查表广告电话
  • 中山视角做网站的公司学seo哪个培训好
  • 铜仁网站建设百度大数据查询怎么用