资讯专栏INFORMATION COLUMN

前段经典算法

邹强 / 3440人阅读

摘要:参考冒泡排序典型的排序方法,命名来自鱼呼吸时吹出的气泡,上层的气泡总是最大的。时间复杂度,属于不稳定的算法特殊情况下会是空间复杂度辅助空间是,所以空间复杂度为

参考lianjie

冒泡排序

典型的排序方法,命名来自鱼呼吸时吹出的气泡,上层的气泡总是最大的。

思路:两层循环,内层循环对比相邻两个数据(j,j+1),假设j > j + 1则交换元素位置。
外层循环为长度限制,在内层第一次循环完成后减少长度1(因为最后一个泡已经固定,为这个数组的最大值)

function bubbleSort(arr){
  for(let i = 0; i < arr.length - 1; i++){
    let flag = false;
    for(let j = 0; j < arr.length - i - 1; j++){
      if(arr[j] > arr[j + 1]){
          let temp = arr[j];
          arr[j] = arr[j+1];
          arr[j+1] = temp;;
          flag = true;
      }
    }
    if(!flag){
      break;
    }
  }
  return arr;
}

加一个标志位flag,如果没有进行交换,将标志位置为false,表示排序完成。

时间复杂度O(n^2),最优情况下是O(n)

空间复杂度O(1)

选择排序

顾名思义,每次都选择最小的,然后交换位置

思路:两层循环,内层循环为选取第一个位置的值,然后将它与剩下的值作对比,得到比它小的则交换位置。外层循环为控制第一位值的固定(一次循环后,第一位则为该数组最小的值,下一次循环不必带上)。

function selectionSort(arr){
  for(let i = 0; i < arr.length - 1; i++){
    let index = i;
    for(let j = i+1; j < arr.length; j++){
    //判断是否有小于当前值,有则交换位置
      if(arr[index] > arr[j]){
        index = j;
      }
    }
      let temp = arr[i];
      arr[i] = arr[index ];
      arr[index] = temp;
  }
  return arr;
}

时间复杂度:O(n^2),属于不稳定的算法(每次交换之后,它都改变了后续数组的顺序)

空间复杂度:O(1)

快速排序

思路:二分法,先找一个基数,分隔出以基数为界的左右两个数组,然后递归重复这个步骤,直到分组剩余一个数,则我们认为已经排列完成。

function quickSort(arr){
  if(arr.length <= 1){
    return arr;
  }
  let temp = arr[0];
  const left = [];
  const right = [];
  for(var i = 1; i < arr.length; i++){
    if(arr[i] > temp){
      right.push(arr[i]);
    }else{
      left.push(arr[i]);
    }
  }
  return quickSort(left).concat([temp], quickSort(right));
}

时间复杂度:O(n*logn),属于不稳定的算法,特殊情况下会是O(n^2)

空间复杂度:辅助空间是logn,所以空间复杂度为O(logn)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/109965.html

相关文章

  • 用最科学的方法展示最形象的图表——前段数据可视化选型实践

    摘要:提供的图表的确可以满足大部分的需求,遵循了数据可视化的一些经典范式。数据可视化已然成为了新的风向标。数据团队的前端要做的就是用最科学的方法向用户展示最形象的图表,而这,也是我们前行的目标。 前言 也许很多人都会觉得奇怪,在这样一个更多以后台数据分析为主的公司,为什么需要一个专注于前端的团队?今天这篇文章就来讲述那些年我们错过的前端数据可视化,以此来解答这个问题。 需求 那么,在我们的项...

    Eminjannn 评论0 收藏0
  • Flutter 会不会被苹果限制其发展_,移动智能终端开发报告

    摘要:到如今都没有官方支持热更新,这大概也是为了应用不受苹果审核条款的忌惮,一旦支持了热更新,那在过审核的时候可能就会没那么容易了,所以热更新对于在平台的存亡是一个重要因素。 再说风险1、和 react-native 、weex 、uni-app 、taro 等平台不同,flutter framework 的大部分控...

    不知名网友 评论0 收藏0
  • 2019 新年第一场 AI 口水仗正在 Twitter 进行

    摘要:超神经新年里,人工智能领域的第一场口水战已经在打响,这次的主题是由媒体网站的一个失误所引发的。这次亲自上场撕的主人公是,虽然不如第一梯队的几位大佬著名,但她也是在机器学习领域里举足轻重的人物。 By 超神经2019 新年里,人工智能领域的第一场口水战已经在 Twitter 打响,这次的主题是由媒体网站 Venturebeat 的一个失误所引发的。这场口水战中,包括 Yann LeCun...

    jay_tian 评论0 收藏0
  • 右脑编程法--左脑是基础(4)之语言篇

    摘要:据统计,编程语言排名前三。还是在知乎上,有好事之徒贴了两个图,我觉得颇为形象,在此与大家分享。上一篇右脑编程左脑是基础之逻辑篇下一篇右脑编程法左脑是基础回顾篇 前段时间出差了,所以没有及时更新写作内容。幸好关注的人还不是特别多,我的压力不算大,自我安慰一下下。 今天我们终于切到一个程序猿/媛职业中最基本,也是最重要的部分了,那就是编程语言。对于不会编程的人来说,这个部分是最为神秘的。...

    Lorry_Lu 评论0 收藏0
  • 右脑编程法--左脑是基础(4)之语言篇

    摘要:据统计,编程语言排名前三。还是在知乎上,有好事之徒贴了两个图,我觉得颇为形象,在此与大家分享。上一篇右脑编程左脑是基础之逻辑篇下一篇右脑编程法左脑是基础回顾篇 前段时间出差了,所以没有及时更新写作内容。幸好关注的人还不是特别多,我的压力不算大,自我安慰一下下。 今天我们终于切到一个程序猿/媛职业中最基本,也是最重要的部分了,那就是编程语言。对于不会编程的人来说,这个部分是最为神秘的。...

    hightopo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<