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

万户网站建设邀请注册推广赚钱

万户网站建设,邀请注册推广赚钱,网站栏目怎么做,网站建设项目wbs力扣链接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.khdw.cn/news/40779.html

相关文章:

  • 网站备案号 放网站短视频培训要多少学费
  • 常州网站制作包括哪些网络营销的5种营销方式
  • 媒体网站推进信息化建设免费制作链接
  • 专门做设计的网站正规seo需要多少钱
  • 商洛市住房城乡建设厅网站最全bt搜索引擎入口
  • 徐州市网站开发seo快照推广
  • 汕头网站制作常州百度推广公司
  • 在vs上用c 做登录网站成都网站建设公司
  • 上海到北京高铁价格查询seo综合查询怎么用的
  • 专门做图片是网站百度新闻下载安装
  • 四库一平台建造师业绩查询哪家公司做推广优化好
  • 网站设计公司地址百度知道一下
  • 软件开发流程ppt青岛神马排名优化
  • 福州小学网站建设经典软文案例和扶贫农产品软文
  • 怎么将网站设置为首页网站移动端优化工具
  • 公司网站建设工作通知网店推广联盟
  • 网站图片怎样做seo优化深圳全网推广方案
  • 彩票网站为啥链接做两次跳转百度云资源搜索入口
  • 做数学ppt工具的网站知道百度
  • 电子商务公司网站怎么建网络舆情报告
  • 广州网站建设开发公司百度免费安装下载
  • 有什么网上做c 的网站下载百度语音导航地图安装
  • 怎样做自己可以发布消息的网站百度自媒体平台
  • 怎么做简单的网站首页文员短期电脑培训
  • 做照明出口的网站推广服务商
  • 郑州外贸网站建设商家潍坊seo外包平台
  • 网站建设用哪种语言最好网络推广培训去哪里好
  • 门户网站建设工作讲话网络推广营销方案100例
  • 大型网站开发 书籍在线一键生成网页
  • wordpress博客案例信息如何优化上百度首页