首页 > 其他分享 >排序-快速排序

排序-快速排序

时间:2024-06-10 23:33:21浏览次数:18  
标签:10 arr return sum 元素 排序 快速

学习目标:

  • 掌握快速排序

学习内容:

  1. 基本思想
  2. 动画演示
  3. 代码
  4. 时间复杂度

基本思想:

  • 从数列中挑出一个元素,称为”基准“。
  • 重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面。
  • 重复上一步,直到所有元素均排序完毕。
  • 分区

动画演示:

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="wKptnyyY-1718032705574" src="https://live.csdn.net/v/embed/397758"></iframe>

快速排序


代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>快速排序</title>
</head>

<body>
  <script>
    function quick(arr) {
      //4.结束递归(当arr中小于等于一项,则不用处理)
      if (arr.length <= 1) {
        return arr
      }


      //1.找到数组的中间项,在原有的数组中把它移除
      let middleIndex = Math.floor(arr.length / 2)
      let middleValue = arr.splice(middleIndex, 1)[0]

      //2.准备左右两个数组,循环剩下数组中的每一项,比当前项小的放到左边数组中,反之,放到右边数组中
      let arrLeft = [],
        arrRight = []
      for (let i = 0; i < arr.length; i++) {
        let item = arr[i]
        item < middleValue ? arrLeft.push(item) : arrRight.push(item)
      }

      //3.递归方式让左右两边的数组持续这样处理,一直到左右两边都排好序为止(最后让左边+中间+右边拼接成为最后的结果)
      return quick(arrLeft).concat(middleValue, quick(arrRight))

    }
    let arr = [4, 7, 6, 5, 3, 2, 8, 1]
    arr = quick(arr)
    console.log(arr)

    /*
    // 递归:函数执行的时候自己调用自己
    function fn() {
      fn()//这种死递归会导致栈溢出
    }
    fn()
    */
    /*
     function fn(){
      setTimeout(fn,0)//这种看似像死递归的方法不会导致栈溢出错误
     }
     fn()
     */

    /*
   //获取1-10的和
   let tatal = null
   for (let i = 1; i <= 10; i++) {
     tatal += i
   }
   console.log(tatal)
   */
    /*
      function sum(n) {
        if (n > 10) {
          return 0
        }
        return n + sum(n + 1)
        //return 1+sum(2)
        // return 1+2+sum(3)
        // ...
        // return 1+2+3+4+5+6+7+8+9+10+sum(11)
        // return 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 0
      }
      let tatal = sum(1)
      console.log(tatal)
      */

  </script>

</body>

</html>

时间复杂度:O(nlogn)

标签:10,arr,return,sum,元素,排序,快速
From: https://blog.csdn.net/m0_64105917/article/details/139581853

相关文章

  • 谁说.net core不好动态访问webservice?看这篇文章,C#快速实现动态访问webservice,兼容.ne
    前言:访问webservice,大多数人都是用服务引用的方式,但是这种方式比较麻烦,例如遇到服务更新了,你还需要手动更新你的服务引用,再重新发布,很麻烦。或者已有的一些例子,至少我看到的很多案例,动态访问也只能止步于使用.netframework环境,没看到有啥.netcore上面动态访问的案例。于是我就来......
  • 冒泡排序(C语言)
    一.冒泡排序的原理冒泡排序的原理是:从左到右,相邻元素进行比较,以升序为例,第1次遍历将最大的数沉底。经过n次遍历这组元素以升序排列->第1次遍历,两个相邻的数比较大小,若左边的数大于右边的数,则两个元素交换位置,反之,继续向后比较,当第1次遍历结束之后该组元素最大的数就被移动......
  • 每日一题(LeetCode 34题,在排序数组中查找元素的第一个和最后一个元素)
    题目:给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1,-1]。你必须设计并实现时间复杂度为 O(logn) 的算法解决此问题示例1:输入:nums=[5,7,7,8,8,10],......
  • 常用排序
    1冒泡排序(BubbleSort)时间复杂度:\(O(n^2)\)voidmp()//自定义mp()函数{for(inti=1;i<=n-1;i++){for(intj=1;j<=n-i;j++){if(a[j]>a[j+1])//相邻元素比较,若逆序则交换(升序为左大于右,降序反之){sw......
  • Atcoder357 D(逆元和快速幂)
    Atcoder357DD题意就是求给定一个数n的连续n个n相拼接,求最后的数\(mod998244353\)的值。我们假设n的长度为len,那么n个n相拼接可以看成n*(\(10^{len^0}\)+\(10^{len^1}\)+....+\(10^{len^{n-1}}\))。那个就可以利用高中等比数列的知识求出公式(\(n*(10^{len^n}-1\))/(\(10^{len}......
  • python快速生成二维码及读取二维码内容 pyqrcode MyQR pyzbar
    目录效果图生成二维码方式1:pyqrcode方式2:MyQR  读取二维码效果图生成二维码方式1:pyqrcode安装pipinstallpyqrcode代码实现importpyqrcode#text为保存在二维码的内容。text为完整链接时,扫描后可直接跳转到该链接text='https://www.baidu.com/'qr=pyqrc......
  • 排序 - 归并排序(Merge Sort)
    将两个的有序数列合并成一个有序数列,我们称之为"归并"。归并排序(MergeSort)就是利用归并思想对数列进行排序。归并排序介绍从下往上的归并排序从上往下的归并排序归并排序实现从上往下的归并排序从下往上的归并排序归并排序的时间复杂度和稳定性归并排序时间复杂度归......
  • 归并排序(Merge_sort)
    归并排序:归并的意思是将两个数组合成为一个,而归并排序就是:将一个数组分为许多个,让多个数组按大小归并,直到归并为一个;基本思想为:将一个数组拆分为许多个两两结合的数组,然后逐步排序主要函数是将两个分开的数组排序成一个数组,需要两个指针指向两个数组开头,每次排列进去最小的......
  • 星参谋:上架新品后怎样才能快速提升排名呢?可以看看这些小窍门
    新品上架,流量不足?买家根本搜不到你的宝贝!原因很简单:新品没有权重,也没有排名!想要突破这一困局,唯一的方法就是卡首屏!但你知道吗?绝大多数的新手商家根本不明白什么是卡首屏!今天我就来一次讲清楚!01什么是卡首屏?有什么优势?卡首屏,简单来说,就是在新品前期,通过特定的操作,让买家......
  • python-pip配置镜像源加速下载Python包安装:快速配置pip源-国内加速源
    目录一、简介二、国内常用加速源 三、配置pip加速源1.临时配置2.永久配置a.配置命令b.查看是否配置成功c.还原配置一、简介pip的原本安装源是PythonPackageIndex(PyPI)的官方源,其URL为https://pypi.org/simple/。PyPI是Python社区用来发布和共享软件包的官方仓......