查找算法 二分查找原理:把目标数和序列中间的数进行比较,如果相等就结束,如果小,就在中间数左边的子序列中查找,如果大就在中间数右边子序列中查找,如果某一个步骤数组为空就是不存在,递归的去查找。
def binarySearch ( arr, l, r, x) :
if r>= l:
mid = int ( l + ( r- l) / 2 )
if arr[ mid] > x:
return binarySearch( arr, l, mid- 1 , x)
elif arr[ mid] == x:
return mid
else :
return binarySearch( arr, mid+ 1 , r, x)
else :
return '此数不存在'
if __name__ == '__main__' :
arr = [ 1 , 4 , 5 , 7 , 9 , 10 ]
x = 6
result = binarySearch( arr, 0 , len ( arr) - 1 , x)
print ( f'查找结果为{result}' )
- 线性查找原理:遍历序列中所有元素,一一比较,直到找到或遍历完所有元素为止,针对于所有无序或有序序列。
def xianxingSearch ( arr, n, x) :
for i in range ( n) :
if arr[ i] == x:
return i
return - 1
arr = [ 1 , 4 , 3 , 6 , 7 , 56 , 12 , 45 ]
x = 56
result = xianxingSearch( arr, len ( arr) , x)
if result != - 1 :
print ( '目标值的索引为%s' % result)
else :
print ( '数组中不存在目标值' )
排序算法
快速排序原理:首先从数组中选取一个基准值(可任意选择),然后把大于基准值的放在右边,小于基准值放在左边,递归对两边的子序列重复上述操作。最后把两边的序列和基准值拼接返回。
def query ( arr) :
if len ( arr) < 2 :
return arr
base_value = arr[ len ( arr) // 2 ]
left_arr = [ ]
right_arr = [ ]
arr. remove( base_value)
for i in range ( len ( arr) ) :
if arr[ i] >= base_value:
right_arr. append( arr[ i] )
else :
left_arr. append( arr[ i] )
return query( left_arr) + [ base_value] + query( right_arr)
arr = [ 1 , 2 , 23 , 4 , 6 , 7 ]
print ( query( arr) )
冒泡排序原理:遍历所有元素,两两比较,按照升序或降序,交换位置。
def maopaoSort ( arr) :
for i in range ( len ( arr) ) :
for j in range ( 0 , len ( arr) - i- 1 ) :
if arr[ j] >= arr[ j+ 1 ] :
arr[ j] , arr[ j+ 1 ] = arr[ j+ 1 ] , arr[ j]
return arr
arr = [ 5 , 4 , 3 , 34 , 6 , 7 ]
new = maopaoSort( arr)
print ( new)
插入排序原理:构建有序序列,把每一个目标元素插入到有序序列的合适位置为止。
def charu ( arr) :
for i in range ( 1 , len ( arr) ) :
key = arr[ i]
j = i - 1
while j>= 0 and key< arr[ j] :
arr[ j+ 1 ] = arr[ j]
j -= 1
arr[ j+ 1 ] = key
arr = [ 3 , 5 , 4 , 2 ]
charu( arr)
print ( arr)
选择排序原理:找出元素中的最大或最小元素,放在有序队列中,然后再找出未排序元素中的最大或最小元素,插入到有序序列的末尾。
def choiceSort ( arr, new= [ ] ) :
min_value = min ( arr)
new. append( min_value)
arr. remove( min_value)
if len ( arr) != 0 :
choiceSort( arr)
return new
arr = [ 3 , 5 , 23 , 6 , 8 ]
res = choiceSort( arr)
print ( res)
如果有什么不足的地方,望大神留言指教?