《数据结构与算法图解》Chapter-4

文章介绍了冒泡排序算法的Python和JavaScript实现,比较了其时间复杂度,并展示了检测数组重复值的改进版本。最后呈现了一个时间复杂度为O(N)的高效解决方案。
摘要由CSDN通过智能技术生成

书名:数据结构与算法图解
作者:[美]杰伊.温格罗 (Jay Wengrow)
出版社:人民邮电出版社
出版时间:2019-04-01
ISBN: 9787115509000

知识点:

  1. 用大O比较算法性能
  2. 冒泡排序,python代码如代码1,主要步骤:比较和交换,步长均为\frac{N^{2}-N}{2},时间复杂度O(N^{2})
  3. O(N^{2})叫做二次时间,JavaScript代码2示意了检测数组重复值以及改良版可以打印步数的代码3,最后是时间复杂度为O(N)的最终版代码4

代码1 

def bubble_sort(list):
    unsorted_until_index = len(list) - 1    # 列表倒数第二个索引
    sorted = False
    step = 0
    while not sorted:
        sorted = True
        for i in range(unsorted_until_index):
            step += 1
            if list[i] > list[i+1]:
                step += 1
                sorted = False              # 排序未完成
                list[i], list[i+1] = list[i+1], list[i]
        unsorted_until_index -= 1
    print(step)

list = [65, 55, 45, 35, 25, 15, 10]
bubble_sort(list)
print(list)    # output:42 [10, 15, 25, 35, 45, 55, 65]

代码2

function hasDuplicateValue(array) {
  for (var i = 0; i < array.length; i++) {
    for (var j = 0; j < array.length; j++) {
      if (i !== j && array[i] == array[j]) {
        return true;
      }
    }
  }
  return false;
}

 代码3

function hasDuplicateValue(array) {
  var steps = 0;
  for (var i = 0; i < array.length; i++) {
    for (var j = 0; j < array.length; j++) {
      steps++;
      if (i !== j && array[i] == array[j]) {
        return true;
      }
    }
  }
  console.log(steps);
  return false;
}

代码4:

array=[3,5,8]

输出existingNumbers=[undefined,undefined,undefined,1,undefined,1,undefined,undefined,1]

function hasDuplicateValue(array) {
  var steps = 0;
  var existingNumbers = [];
  for (var i = 0; i < array.length; i++) {
    steps++;
    if (existingNumbers[array[i]] === undefined) {
      existingNumbers[array[i]] = 1;
    } else {
      return true;
    }
  }
  console.log(steps);
  return false;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值