排序算法之冒泡排序

排序算法之冒泡排序


1. 常见排序算法的时间复杂度:

  • 时间复杂度为 O(N ^ 2) 的有:选择排序、冒泡排序、插入排序
  • 时间复杂度为 O(N * log N) 的有:归并排序、快速排序
  • 时间复杂度为O(N * log N)的算法比时间复杂度为 O(N ^ 2)的算法好的多
  • 时间复杂度就相当于数组的长度N与执行时间的关系
  • 时间复杂度的表示,按算最坏的情况看,而且忽略常数时间(执行时间确定的时间)
  • 算法的时间复杂度表示相同,它的区别是常数时间不同,但要排序的数组长度很长时,常数时间的影响可以忽略不计

2. 冒泡排序

排序过程:

  • 在arr[0 ~ N-1]范围上(N表示数组长度):
    • arr[0]和arr[1]谁大谁的位置就到1,arr[1]和arr[2]谁大谁的位置就到2,… ,arr[N-2]和arr[N-1]谁大谁位置就在N-1。这样遍历一遍就可以将范围中最大的数放到最后。
  • 在arr[0 ~ N-2]范围上(相对上一步末尾范围-1):
    • 重复上一步的过程,最后一步是arr[N-3]和arr[N-2],谁大谁往后。
  • 最后在arr[0~1]的范围上,重复上面的过程,谁大就谁在1的位置
  • 每一步的范围都在缩小,因为每遍历一遍就能将范围内的最大数排到最后,所以这个最大数后续没有必要再遍历

代码实现(JavaScript):

function bubbleSort(arr) {
  // 对传入的参数进行判断
  if (!Array.isArray(arr) || arr.length < 2) {
    return arr
  }
  // 遍历数组每一项,并逐步缩减范围
  for (let i = arr.length - 1; i > 0; i--) {
  	// 从第一项开始,不断向后对比并移动,如果前一项比后一项大则交换位置,直到遍历到范围末尾
    for (let j = 0; j < i; j++) {
    	// 元素位置交换
      if (arr[j] > arr[j + 1]) {
        let tmp = arr[j]
        arr[j] = arr[j + 1]
        arr[j + 1] = tmp
      }
    }
  }
  // 返回结果
  return arr
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值