python 基础知识点(蓝桥杯python科目个人复习计划19)

今日复习内容:二分查找,基础算法中的冒泡排序

一.二分查找

1.bisect --- 数组二分查找算法

bisec模块:维护一个已排序列表,支持二分查找,二分插入

bisect_left(a,x,lo = 0,hi = len(a)):

  • 查找有序列表a中,插入元素x的第一个位置
  • 如果a中存在元素x,返回第一个x的位置

bisec_right(a,x,lo = 0,hi = len(a)) :

  • 查找有序列表a中,插入元素x的最后一个位置
  • 如果a中存在元素x,返回最后一个x的位置
from bisect import *
a = [2,1,0,2,5,3,3,2,4,1,3,1]
sorted_a = sorted(a)
print(sorted_a)
x = 6
print('x = {},a 中查找的第一个位置为{}'.format(x,bisect_left(a,x)))
x = 10
print('x = {},a 中查找的第一个位置为{}'.format(x,bisect_left(a,x)))
x = 2
print('x = {},a 中查找的第一个位置为{}'.format(x,bisect_left(a,x)))
x = 2
print('x = {},a 中查找的最后一个位置为{}'.format(x,bisect_right(a,x)))

运行结果:

python 基础知识点(蓝桥杯python科目个人复习计划19)_第1张图片 

 2.bisect --- 数组二分插入算法

bisect模块:维护一个已排序列表,支持二分查找,二分插入

insort_left(a,x,lo = 0,hi = len(a)):

  • 查找有序列表a中,在第一个位置插入元素x保持有序

insort_right(a,x,lo = 0,hi = len(a)) :

  • 查找有序列表a中,在最后一个位置插入元素x保持有序
from bisect import *
a = [1,1,2,2,2,4,7]
x = 3
insort_right(a,x)
print('a = ',a)

运行结果:

 

 二.基础算法中的冒泡排序

1.冒泡排序

算法步骤:

  • 比较相邻元素,如果第一个比第二个大就交换
  • 从左往右遍历一遍,重复上一步,可以保证最大的元素在最后面
  • 重复上述操作,直到排列成从小到大的一个序列

 2.具体描述

  • 给定一个长度为n的列表,算法循环n-1次可以得到有序序列
  • 第一次循环两两比较:< a[0],a[1] >,< a[1],a[2] >,...,< a[n-3],a[n-2] >,
  • 第二次循环两两比较:< a[0],a[1] >,< a[1],a[2] >,...,< a[n-3],a[n-2] >
  • 第三次循环两两比较:< a[0],a[1] >,< a[1],a[2] >,...< a[n-4],a[n-3] >
  • 第i次循环两两比较:< a[0],a[1] >,< a[1],a[2] >,...< a[n-i-1],a[n-i] >
  • 第n-1次循环两两比较:< a[0],a[1] >
  • 时间复杂度:O(n^2),空间复杂度O(1),稳定

这么说太抽象了,来做一个练习题 

题目描述:

在一个神秘的岛屿上,有一支探险队发现了一批宝藏,这批宝藏是以整数数组的形式存在的,每个宝藏上都标有一个数字,代表了其珍贵程度。然而,由于某种神秘力量,这批宝藏的顺序被打乱了,探险队需要将宝藏按照其珍贵程度进行排序,以便更好地保护和研究它们。作为探险队的一员,肖恩需要设计合适的排序算法来将宝藏按照其珍贵程度从小到大进行排序,请你帮帮他。 

输入描述:

输入第一行包括一个数字n,表示宝藏一共有n个;

输入第二行包括n个数字,第i个数字 a[i]表示第i个宝藏的珍贵程度;

数据保证1 < n < 1000,1 < a[i] < 10^6

输出描述:

输出n个数字,为对宝藏按照其珍贵程度从小到大进行排序的结果

参考答案:

n = int(input())
a = list(map(int,input().split()))
# 循环n-1次,每次获得第i大
for i in range(1,n):
    for j in range(0,n-i):
        if a[j] > a[j+1]:
            a[j],a[j+1] = a[j+1],a[j]
print(' '.join(map(str,a)))

运行结果:

python 基础知识点(蓝桥杯python科目个人复习计划19)_第2张图片 

OK,今天就写到这里,我写这篇的时候,挺烧脑的,因为不管怎么改,都没有那种表述特别清楚的感觉,但我改到最后一遍的时候,终于达到了自己想要的效果,因为我终于理解我这次写的知识点了,有种成就感,哈哈。

就这样吧,下次继续,得睡觉了! 

你可能感兴趣的:(数据结构)