一、查找

1、查找的概念:

2 顺序查找(linear search)

从头找到尾

def linear_search(li,val):
for ind ,v in enumerate(li):
if v==val:
return ind
else:
return None

3 二分查找(binary search):

def binary_search(li,val):
left = 0
right = len(li)-1
while left<=right:
mid = (left+right)/2
if li[mid] == val:
return mid
elif li[mid] >val:
right = mid -1
else:
left = mid + 1
else:
return None

----------------

------------------------------

二、列表排序

1、什么是列表排序

排序:将一组“无序”的记录序列调整为“有序”的记录序列

列表排序:将无序列表变为有序列表

输入:列表

输出:有序列表

升序和降序

内置排序函数

2、常见排序算法介绍

排序的Low B三人组

时间复杂度都是O(n^2)

3、排序算法分析

冒泡排序(Bubble sort) 走n-1趟

第一次外层循环把最大的一个数移到最后;第二次外层循环把第二大的移到最后

每一次内部循环都从索引为0和1的数的比较

基本思想:对比相邻的元素值,如果满足提条件就交换元素值,把较小的元素移动到数组前面,把较大的元素移动到数组后面,这样较小的的元素就像气泡一样从底部上升到顶部

def bubble_sort(li):
for i in range(len(li)-1):# n-1趟
for j in range(len(li)-i-1): # 每一次内部循环需要比较的次数
#
if li[j]>li[j+1]:
li[j],li[j+1] = li[j+1],li[j]
print(li,f'第{i+1}次外部循环 ,内部循环比较次数{len(li)-i-1}') li = [4,2,5,1,7,8,9,3,6]
bubble_sort(li)

-------------------------

def bubble_sort(li):
for i in range(len(li)-1):
for j in range(len(li)-i-1):
if li[j]>li[j+1]:
li[j],li[j+1] = li[j+1],li[j]
# t=li[j]
# li[j]=li[j+1]
# li[j+1]=t
import random
# 列表生成式 L = [x * x for x in range(10)] 生成一个list,长度为1000,里面的元素是可以重复的随机数(范围0-10000)
li = [random.randint(0,10000) for i in range(1000)]
print(li)
bubble_sort(li)
print(li)

---------------------------

3.2 选择排序(select sort)

每一次循环选出最小的一个

基本思想:将指定排序位置与其他数组元素分别对比,如果满足条件就交换元素值,把满足条件的元素与指定的排序位置交换

def select_sort(li):
for i in range(len(li)-1):
min = i
for j in range(min+1,len(li)):
if li[min]>li[j]:
li[min],li[j] = li[j],li[min]
print(li, f'第{i+1}次外部循环 ,内部循环比较次数{len(li)-min-1}') li = [4,2,5,1,7,8,9,3,6]
select_sort(li)
print(li)

li = [3,2,4,1,5,6,8,7,9]
def select_sort_simple(li):
li_new = []
for i in range(len(li)):
min_val = min(li)
li_new.append(min_val)
li.remove(min_val)
return li_new print('select_sort_simple',select_sort_simple(li)) def select_sort(li):
for i in range(len(li)-1):
min_loc = i
for j in range(i+1,len(li)):
if li[j] < li[min_loc]:
min_loc = j
li[i],li[min_loc] = li[min_loc],li[i]
print(li) select_sort(li)

-------------------------------

复杂度:0(n^2)

3.3 插入排序

基本思想:将一个记录插入到已排好序的有序表中,从而得到一个新的,记录数增1的有序表,然后再从剩下的关键字中选取下一个插入对象,反复执行直到整个序列有序。

def insert_sort(li):
for i in range(1,len(li)):
tem = li[i] # 要插入的数
j = i-1 # j指的是手里的牌的下标
while li[j] > tem and j>=0:
li[j+1] = li[j]
j -= 1
li[j+1] = tem
print(li)
li = [3,2,4,1,5,7,9,6,8]
insert_sort(li)
print(li,'最后结果')

插入排序的复杂度:O(n^2)

最新文章

  1. Csharp--Read Csv file to DataTable
  2. 10款免费而优秀的图表JS插件
  3. VSS 请求程序和 SharePoint 2013
  4. 给select添加自定义值和选项
  5. nginx for windows中的一项缺陷
  6. php中magic_quotes_gpc对unserialize的影响
  7. Cocos2d-JS中的Sprite精灵类
  8. mvc bundle功能(1)
  9. laravel队列-让守护进程处理耗时任务
  10. memcpy造成其他变量值改变
  11. JavaScript模块化编程之require.js与sea.js
  12. 利用光场进行深度图估计(Depth Estimation)算法之一——聚焦算法
  13. CXF-02: 使用CXF处理JavaBean式的复合类型和List集合类型
  14. Ubuntu通过ADB连接手机
  15. sqlserver使用存储过程跟踪SQL
  16. 前端整理——Vue部分
  17. 【转】老左常用国内/国外VPS推荐
  18. Spring总结 2.装配bean
  19. C++之友元函数和友元类
  20. MongoDb 物理位置应用实现

热门文章

  1. 修改最后一次 已commit 的备注
  2. 云中树莓派(4):利用声音传感器控制Led灯
  3. spring cglib实现嵌套方法拦截
  4. Hadoop+Hbas完全分布式安装部署
  5. Abp IRepository 方法解释(1)
  6. 搞定queryString
  7. SAS DATA ENCODING 解决odbc乱码问题
  8. Markdown画各种图表
  9. Java虚拟机------JVM分析工具
  10. 如何在maven项目里面编写mapreduce程序以及一个maven项目里面管理多个mapreduce程序