首页 > 其他分享 >冒泡排序、选择排序 、快速排序 、

冒泡排序、选择排序 、快速排序 、

时间:2022-10-08 18:45:11浏览次数:38  
标签:arr min mid 冒泡排序 序列 var 排序 快速

1.冒泡排序

每一趟只能确定将一个数归位。即第一趟只能确定将末位上的数归位,第二趟只能将倒数第 2 位上的数归位,依次类推下去。如果有 n 个数进行排序,只需将 n-1 个数归位,也就是要进行 n-1 趟操作。

而 “每一趟 ” 都需要从第一位开始进行相邻的两个数的比较,将较大的数放后面,比较完毕之后向后挪一位继续比较下面两个相邻的两个数大小关系,重复此步骤,直到最后一个还没归位的数。

复制代码
      function bubbleSort(arr) {
        for (var i = 1; i < arr.length; i++) {
          for (var j = 0; j < arr.length - i; j++) {
            if (arr[j] > arr[j + 1]) {
              var num = arr[j];
              arr[j] = arr[j + 1];
              arr[j + 1] = num;
            }
          }
        }
        return arr;
      }
复制代码

时间复杂度:O(n^2)

2.选择排序

工作原理是:第一次从待排序的中数据元素选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。首先在未排序的序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

复制代码
      function selectionSort(arr) {
        for (var i = 0; i < arr.length - 1; i++) {
          var min = i;
          for (var j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[min]) min = j;
          }
          if (min != i) {
            var num = arr[i];
            arr[i] = arr[min];
            arr[min] = num;
          }
        }
        return arr;
      }
复制代码

时间复杂度:O(n^2)

3.快速排序

(1)选出一个mid,一般是最左边或是最右边的。
(2)定义一个left[]和一个right[],遍历数组,在走的过程中,若遇到大于mid的数,则存入right中,否则存入right中
(4)此时mid的左边都是小于mid的数,mid的右边都是大于mid的数
(5)将mid的左序列和右序列再次进行这种单趟排序,如此反复操作下去,直到左右序列只有一个数据,或是左右序列不存在时,便停止操作,此时此部分已有序

复制代码
      function quickSort(arr) {
        if (arr.length <= 1) {
          return arr;
        } else {
          var left = [],
            right = [],
            mid = arr[0];
          for (var i = 1; i < arr.length; i++) {
            arr[i] > mid ? right.push(arr[i]) : left.push(arr[i]);
          }
          return quickSort(left).concat([mid], quickSort(right));
        }
      }
      console.log(quickSort(arr));
复制代码

时间复杂度:O(nLogn)

标签:arr,min,mid,冒泡排序,序列,var,排序,快速
From: https://www.cnblogs.com/luochenhuan/p/16769851.html

相关文章

  • 冒泡排序算法并调优
    算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。......
  • 数组-算法-排序
    定义数组publicstaticvoidmain(String[]args){  //我们的数组必须初始化,才能使用  //动态出初始化:接受由我们指定的长度,由系统赋初始值  int[]arr=......
  • 插入排序 和 希尔排序 java
    ​​http://mp.weixin.qq.com/s/deUy_VPJ2m6BFbrEZp9DKg​​​选择排序/***Createdbyfupengon2017/1/19.*/publicclassinsertstaticvoidshow(int[]a){......
  • lucas定理快速求解组合数(适用于MOD较小)
    lucus求解组合数的时间复杂度为O(MODlogn(MOD))适用于MOD较小但n较大的情况模板:LLMOD=1e6+3;LLQuickExp(LLbase,LLexp){LLres=1;while(exp){......
  • 办公必备 | 小白如何快速制作动画视频?我想说说这个软件…
    平时在公司需要制作一些动画视频时,很多朋友都觉得很难,无从下手。这里给大家说说这个免费软件——万彩动画大师(www.animiz.cn),是一款易上手的动画视频制作神器,操作比AE、Flash......
  • JSP快速上手与MVC模式和三层架构的知识点总结+综合案例
    阅读提示:说明由于JSP实在是太难读难写复杂占资源难调试不分离了,拉跨!(节目效果哈,勿喷),作为一种有(ji)更(hu)好(jiu)的(yao)上(bei)位(tao)替(tai)代(le)的技术,本着为了体现新技......
  • 对象数组的排序
    假如我们想实现,把这样一个数组排下序,先按一个属性排,再按另一个属性排vararr=[{cezuProjectName:'1',group:'a'},{cezuProjectName:'2',group:'b'},{cezuProjec......
  • 1 1.1.1.1 1.1.2 1.3 2 2.1 ...这样的数据sql排序
    ----其中wbscode为1 1.1.1 1.1.2这样的编码。主要关注的地方为:1分解函数  2.根据分解函数进行行转列  3最终合并数据去重 -----分解函数CREATEFUNCTI......
  • fast-data-dev 快速基于容器的kafka 环境
    fast-data-dev是由lensesio团队提供的一个快速部署kafka测试环境的工具包含的组件kafkazkschemaregistrykafkaconnect以及其他不少的connector参考资料​​https://git......
  • 快速排序模板及快速选择例题
    快速排序模板及快速选择例题快速排序思路首先选择出分界值,x=q[l]或q[r]或q[(l+r)/2];将整个数组分为左右两段,使得左边的所有数都<=x,右边的所有数都>=x2.......