容器查找:要一个一个遍历。
数据结构和算法:树,图,排序、查找
import builtins
dir(builtins)#查看异常,全局函数
排序:将无序转换为有序的数据。
python自己有强大的模块:
具体实现查看地址:https://docs.python.org/zh-cn/3.7/howto/sorting.html
( list.sort() 方法只是为列表定义的,而 sorted() 函数可以接受任何可迭代对象。)
ls = [3, 2, 1, 56, 77, 21, 4357, 765, -232, 0, 99]
ls.sort()#升序排列
#ls.reverse()#倒列表实现降序
print(ls)
``
排序算法:冒泡排序、选择排序、插入排序 、
冒泡(二种排序:升序(从小到大,大数上浮法),降序(从大到小):升序(默认第一个数就是最大的,依次比较,发现下一个比第一个打,数进行交换)
升序:
'''
ls富
2021/1/18
冒泡排序
'''
#升序(查找最大次数为列表元素-1次:恰好降序)
def asending_sort(ls):
for i in range(len(ls)):
#在一个循环,进行比较次数
for j in range(len(ls)-i-1):#-1是防止下标越界,由于i增加,比较次数可以减少,增加效率
if ls[j] > ls[j+1]:
ls[j],ls[j+1]=ls[j+1],ls[j]
print(ls)
if __name__ == '__main__':
ls = [3, 2, 1, 56, 77, 21, 4357, 765, -232, 0, 99]
asending_sort(ls)
降序:
'''
ls富
2021/1/18
冒泡排序
'''
#升序(查找最大次数为列表元素-1次:恰好降序)
def descending_sort(ls):
for i in range(len(ls)):
#在一个循环,进行比较次数
for j in range(len(ls)-i-1):#-1是防止下标越界,由于i增加,比较次数可以减少,增加效率
if ls[j] < ls[j+1]:
ls[j],ls[j+1]=ls[j+1],ls[j]
print(ls)
if __name__ == '__main__':
ls = [3, 2, 1, 56, 77, 21, 4357, 765, -232, 0, 99]
descending_sort(ls)
选择排序:(每次查找找到最小值(或最大值)和后面交换:
'''
ls富
2021/1/18
选择排序
'''
#升序(查找最大次数为列表元素-1次:恰好降序)
def asending_sort(ls):
for i in range(len(ls) - 1):
# 记录最小数的索引
minIndex = i
for j in range(i + 1, len(ls)):
if ls[j] < ls[minIndex]:
minIndex = j
# i 不是最小数时,将 i 和最小数进行交换
if i != minIndex:
ls[i], ls[minIndex] = ls[minIndex], ls[i]
return print(ls)
if __name__ == '__main__':
ls=[22,1423,4,676,7,78,78,124]
asending_sort(ls)
插入排序:(根据开头二个排序,导入后面的数,与前面进行比较,找到位置进行插入)
'''
ls富
2021/1/18
选择排序
'''
#升序(查找最大次数为列表元素-1次:恰好降序)
def asending_sort(ls):
for i in range(len(ls)):
preindex = i-1
current = ls[i]
while preindex >= 0 and ls[preindex] > current:
ls[preindex+1] = ls[preindex]
preindex-=1
ls[preindex+1] = current
return print(ls)
if __name__ == '__main__':
ls=[22,1423,4,676,7,78,78,124]
asending_sort(ls)
查找:从有序数据中查一个特殊位置。
查找方法:二分查找(折半查找:保证有序,1,找到中间数(进行比较,选择一边),再循环上面操作,找到需要元素(元素越多,效率越高))
def binary_search(ls, key):
low = 0
high = len(ls) - 1
time = 0
while low < high:
time += 1
mid = int((low + high) / 2)
if key < lis[mid]:
high = mid - 1
elif key > lis[mid]:
low = mid + 1
else:
# 打印折半的次数
print("times: %s" % time)
return mid
print("times: %s" % time)
return False
if __name__ == '__main__':
ls = [1, 5, 7, 8, 22, 54, 99, 123, 200, 222, 444]
result = binary_search(ls, 99)
print(result)
参考地址:https://www.cnblogs.com/feixuelove1009/p/6148357.html