1、冒泡排序
冒泡排序比较常见,面试很多都会问到这个算法,其原理比较简单,代码实现也很简单
# 冒泡排序 # 先定一个一个需要排序的列表 l = [7,2,3,1,4,5,6,9,8] # 统计一下长度 n = len(l) ## 先遍历所有元素 for i in range(len(l)): ## 最后还剩多少个元素需要对比排序,因为本身自己不需要排序,所以-1,之前已经拍过多少个数字了,还剩下多少就需要把i也减去 for j in range(n-i-1): ## 对比,如果当前的数字比后面的数字大,则对换 if l[j] > l[j+1]: l[j],l[j+1] = l[j+1],l[j] print(l)
结果为:
2、二分算法
二分算法是比较常见的一种算法,也是面试里面比较常问的一种算法,代码如下。
def erfen(list1,num): headIndex = 0 ## 首索引 endIndex = len(list1)-1 ## 结尾索引 count = 0 ## 计数用 while headIndex <= endIndex: ## 循环查找 midIndex = (headIndex+endIndex)//2 ## 每次重新赋值中间索引 count +=1 #if len(list1)%2 == 0: if num == list1[midIndex]: ## 判断是否找到 print(f'查找 {num} 共计执行 {count} 次') return num if num > list1[midIndex]: ## 如果目标数字比中间索引的数值大,首索引则赋值为中间索引加一,加一是为了处理最后一个位置的数值 headIndex = midIndex +1 if num < list1[midIndex]: ## 如果目标数字比中间索引的数值小,末尾索引则赋值为中间索引减一,减一是为了处理开头位置的数值 endIndex = midIndex -1 else: print('没有找到这个数字') ## 这里测试一下 l = [1,2,3,4,5,6,7,8,9,10] for i in range(1,11): erfen(l,i)
结果如下: