插值查找
数据必须是有序的,除了要考虑位置还得考虑元素的分布情况
斐波那契查找
斐波那契查找原理与二分查找相似,仅仅改变了中间结点(mid)的位置,mid不再是中间或插值得到,而是位于黄金分割点附近
查找算法---(图解)斐波那契查找-CSDN博客
排序算法
冒泡排序
两两比较,左大右小就交换,第一轮就找出最大值
选择排序
插入排序
希尔排序*
直接插入排序的优化
希尔排序是将数据分组,将每一组进行插入排序。
每一组排成有序后,最后整体就变有序了。
public static void shellSort(int[] array2) {
int gap = array2.length;//为数组的长度 - 为10
while (gap > 1) {
gap /= 2;//先是分成了5组,然后是2组,再是1组
shell(array2, gap);//调用直接插入排序方法
}
}
//实现直接插入排序方法
public static void shell(int[] array2, int gap) {
//i下标从第一组的第二个数据开始
for (int i = gap; i < array2.length ; i++) {
int tmp = array2[i];//tmp存放i下标的值
int j = i - gap;//j下标为i-gap个位置
//j每次-gap个位置
for (; j >= 0; j-=gap) {
if (array2[j] > tmp) {
//j下标的值大,将j下标的值放到j变量加上一个gap的位置上
array2[j + gap] = array2[j];
}else {
//j下标的值较小,j下标的值要直接放到j变量加上一个gap的位置上
break;
}
}
//此时j下标的值是负数了,将tmp的值放到j变量加上一个gap的位置上
array2[j + gap] = tmp;
}
}
快速排序*
快速排序(Quick sort)是对冒泡排序的一种改进
def swap(arr, i, j):
arr[i], arr[j] = arr[j], arr[i]
def partition(arr, left, right):
pivot = left
index = pivot+1
i = index
while i<=right:
if arr[i]<arr[pivot]:
swap(arr, i, index)
index+=1
i+=1
swap(arr, pivot, index-1)
return index-1
def quickSort(arr, left=None, right=None):
left = 0 if not isinstance(left, (int, float)) else left
right = len(arr)-1 if not isinstance(right, (int, float)) else right
if left < right:
partitionIndex = partition(arr, left, right)
quickSort(arr, left, partitionIndex-1)
quickSort(arr, partitionIndex+1, right)
return arr
排序——快速排序(Quick sort)-CSDN博客
堆排序*
堆的结构可以分为大根堆和小根堆,是一个完全二叉树,而堆排序是根据堆的这种数据结构设计的一种排序,下面先来看看什么是大根堆和小根堆
归并排序*
是用分治策略(分治法)实现对n个元素进行排序的一种高速的、稳定的排序算法
数据结构和算法:归并排序(合并排序)详解_合并排序是采用分治策略实现对n个元素进行排序的算法,是分治法的一个典型应用和完-CSDN博客
计数排序
基数排序*
排序算法是一种非比较算法,其原理是将整数按每个位数分别比较。它利用了桶的思想。
桶排序*
桶排序
,也叫作箱排序
,是一个排序算法,也是所有排序算法中最快、最简单的排序算法。
排序算法 | 桶排序算法原理及实现和优化_桶排序改进-CSDN博客
列表对象函数
对象函数是区别于内置函数的,内置函数直接调用即可len()max()
对象函数 必须通过某一个具体的对象来调用 列表.函数名()
append()
讲某一个元素对象添加在列表的表尾
如果添加的是其他的序列,该序列也会被看成是一个数据对象
arr = [1,2,3,4]
arr.append(5)
print(arr)
arr2 = [6,7,8]这是一个对象
arr.append (arr2)
print(arr)
count()
统计列表中 某一个元素出现的次数
arr = [1,2,3,4, 1, 2, 3, 1, 1, 2, 0, 0, 1]
print(arr.count(1))
expend()
在当前列表中 将传入的其他序列的元素添加在表尾
arr1 = [1,2,3]
arr2 = [4,5,6]
arr1.extend(arr2)
print(arr1)
arr1.extend(7)
TypeError: 'int' object is not iterable(可迭代的=序列)
arr1.extend("ABC")
print(arr1)
index()
查找(从左到右)元素第一次出现的位置(角标)
arr = [1,2,3,4, 5, 6, 7, 4, 5, 6, 9]
print(arr.index(4))
print(arr.index(4, 5,8))#[5,8)区间中找4的角标
print(arr.index(10))
ValueError: 10 is not in list 找不到则报错
insert(index,obj)
在某一个角标出处插入一个元素
arr = [1,2,3,4]
arr.insert(2, 5)
print(arr)
pop()
弹栈:删除最后一个元素 并返回其值
也可以删除指定角标处的元素
arr = [1,2,3,4]
print(arr.pop())
print(arr)
print(arr.pop(1))删除角标1对应的元素
print(arr)
remove()
移除指定元素 从左到右第一次出现的
arr = [1,2, 3, 4, 2, 3, 4, 2, 3, 4]
arr.remove(4)
print(arr)
reverse()
翻转列表
arr = [1,2,3,4]
arr.reverse()
print(arr)
sort()
排序
arr = [4,2, 5, 2, 6, 2, 7, 9, 4, 7, 2, 7]
arr.sort()
print(arr)
arr = [4,2, 5, 2, 6, 2, 7, 9,4, 7, 2,7]
# arr.sort()# 默认升序
arr.sort(reverse=Truel) # 降序
arr=["ABC","123123123","我爱你中国","123123123","kasdkjas"]
arr.sort(key= len)#以序列的长度为基准进行排序
print(arr)
clear()
清空
arr = [1,2,3,4]
arr.clear()
print(arr)
copy()
复制一个列表(浅拷贝)
arr1 = [1,2,3,4]
arr2 = arr1.copy()
print(arr1 == arr2) # True 比较的是内容
print(arr1 is arr2) # False 比较的是对象地址
print(arr1)
print(arr2)
arr1[0] = 5
print(arr2[0])
# 上述代码在arr1中修改元素 并不影响arr2
arr1 = [1,2,3, [4,5,6]]
arr2 = arr1.copy()
arr2[0] = 7
print(arr1[0])
print(arr2[0])
arr2[3][0] = 666
print(arr1[3])
# 上述代码在arr2中修改元素 影响arr1
arr2[3] = [9,9,9]
print(arr1[3])
print(arr2[3])
# 额外的知识
# del关键字:删除
arr = [1,2,3,4]
del arr[0] #删除序列中的元素
print(arr)
del arr # 删除变量
NameError: name 'arr' is not defined. Did you mean: 'arr2'?
print(arr)
字符串对象函数
可变对象与不可变对象
列表是可变对象:可以修改列表中的元素 甚至长度
字符串是不可变对象:不可以修改字符串中的元素 包括长度
注意:也就意味着对字符串的修改一律不是在本身修改 而是创建一个新的字符串!
>>> arr = [1,2,3]
>>> arr[0] = 4
>>> arr
[4, 2, 3]
>>> S = "ABC"
>>> s[0]
'A'
>>>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
字符串对象不支持元素修改
center()
制定填充字符 将目标字符进行居中
s1 = "ABC"
s2 = s1. center(10, "#")
print(s1)
print(s2)
count ()
和列表的count相似 统计字符串的个数
s = "abchjghjabcjkhjkhabchkjhabc"
print(s. count( "abc") }
print(s.count("a"))
# count是非贪心统计 贪心统计6个
S = "AAAAAAAA"
print(s.count("AAA") )
print(s.count("AAA",2,6))
endswith()
过滤字符串结尾 同样也可以指定区间
s="泷泽萝拉.avi"
print(s.endswith(".avi"))
find()
寻找字符串第一次出现的位置 同样也可以指定区间
s=“八百标兵奔北坡”
print(s.find("标兵")) #2 指定是标的角标
format()
格式化输出
name =“小强”
age = 18
print(“我的名字叫%s,年龄%d岁”%(name,age))
print(“我的名字叫{},年龄{}岁".format(name,age))
print(f"我的名字叫{name},年龄{age}岁")
print(f"我的名字叫{3>2},年龄{2**8}岁")
index()
isalnum()
判断是否是字母或数字字符串 al-alpha 字母 num-number 数字
print("abc".isalnum())
print("123".isalnum())
print("abc123".isalnum())
print("abc123^&%&^&".isalnum())
# isalpha()是否是纯字母字符串
# isdecimal()是否是十进制纯数字字符串
# isdigit()是否是纯数字字符串
# isspace()是否是纯空格字符串
# islower()出现的字母是否是小写字母
print("123abc".islower())
print("123Abc".islower())
# isupper()出现的字母是否是大写字母
# join()将字符串列表进行拼接的
arr = ["banana", "orange", "apple","pich"]
s = "-". join(arr)
print(s)
# ljust()左对齐 rjust()右对齐
print("ABC".ljust(10, "#"))
print("ABC".rjust(10, "#"))
# lower()出现的大写字母转小写 upper()相反
print("Hello World123". lower())
# lstrp()去除左边空格 rstrip()去除右边空格
print(" ABC ". lstrip())
print(" ABC ". rstrip())
print(" ABC ".strip())#两边都去掉连续空格
print(" A B C ".strip())
# replace(a,b)替换 al日 b新
s="宇智波佐助、宇智波斑、宇智波鼬、宇智波泉奈、宇智波止水、宇智波卡卡西"
s1=s.replace("宇智波",“千手”)
print(s)
print(s1)
# split() 以某一个分割符来切割字符串 结果是一个字符串的列表
s ="泰罗-杰克-赛文-迪迦-梦比优斯”
arr = s.split("-")
print(arr)
arr = "1 2 34 4.12".split(" ")
print(arr)
math模块
python math模块详解_math在python中是什么意思-CSDN博客
random模块
Python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等。