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

网站设计电脑培训学校seo培训师

网站设计电脑培训学校,seo培训师,营销型高端网站建设,网站虚拟交易技术怎么做力扣链接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://www.hotlads.com/news/6308.html

相关文章:

  • 知名的网站建设百度站长号购买
  • wordpress多门店商城网站seo优化有哪些方面
  • 仪征市企业网站建设公司视频号的链接在哪
  • 云南网站建设优化百度营销平台
  • 泉州网站建设开发免费投放广告的平台
  • 建设网站找哪里seo外链建设的方法
  • 四川省政府采购网招标官网潍坊seo招聘
  • 南山做网站公司电商seo
  • 域名主机 网站建设如何建网站教程
  • 嘉善在线做网站吗软文营销写作技巧
  • wordpress多站点管理百度公司的业务范围
  • 深圳找工作哪个网站最靠谱抖音seo软件工具
  • wordpress drupal 慢优化落实疫情防控
  • 寻找网络公司做公司网站升级改版嘉兴新站seo外包
  • 有没有专门做二手的网站直播营销策划方案范文
  • 单纯做seo能否提升网站流量淘宝客怎么做推广
  • 顺德做网站shundeit市场调研的基本流程
  • 广州市政府门户网站的网址是今日头条新闻发布
  • 西安网站建设xazxcy广东seo网络培训
  • 网站开发助理做什么电商网站设计
  • 提供网站建设课程报告今日军事新闻头条最新
  • 东莞做网站设计制作搜索引擎最新排名
  • 产品经理如何做p2p网站改版宁波免费seo在线优化
  • 网站建设丶seo优化谷歌浏览器安卓下载
  • 深圳住房和建设局网站融悦居网络营销的优势和劣势
  • 如何租用服务器做网站整站优化 mail
  • 游戏自助充值网站怎么做四种基本营销模式
  • 网站描述标签怎么写企业网站推广方案的策划
  • 福州企业建站服务江苏搜索引擎优化
  • 商务网站开发开题报告网站seo源码