各种算法
斐波那锲数
def func(arg1,arg2): if arg1 == 0: print arg1, arg2 arg3 = arg1 + arg2 print arg3 func(arg2, arg3) func(0,1) Demo
冒泡排序
冒泡排序是排序中经典排序之一,它利用相邻元素比较并进行位置的互换...
需求:请按照从小到大对列表 [13, 22, 6, 99, 11] 进行排序
思路:相邻两个值进行比较,将较大的值放在右侧,依次比较!
li = [13, 22, 6, 99, 11] for m in range(4): # 等价于 #for m in range(len(li)-1): if li[m]> li[m+1]: temp = li[m+1] li[m+1] = li[m] li[m] = temp 第一步
li = [13, 22, 6, 99, 11] for m in range(4): # 等价于 #for m in range(len(li)-1): if li[m]> li[m+1]: temp = li[m+1] li[m+1] = li[m] li[m] = temp for m in range(3): # 等价于 #for m in range(len(li)-2): if li[m]> li[m+1]: temp = li[m+1] li[m+1] = li[m] li[m] = temp for m in range(2): # 等价于 #for m in range(len(li)-3): if li[m]> li[m+1]: temp = li[m+1] li[m+1] = li[m] li[m] = temp for m in range(1): # 等价于 #for m in range(len(li)-4): if li[m]> li[m+1]: temp = li[m+1] li[m+1] = li[m] li[m] = temp print li 第二步
li = [13, 22, 6, 99, 11] for i in range(1,5): for m in range(len(li)-i): if li[m] > li[m+1]: temp = li[m+1] li[m+1] = li[m] li[m] = temp 第三步
选择排序,顾名思义先 创建一个特殊的变量:
- 选择第一个值的索引赋值给特殊变量,然后循环其他索引并进行值的比较,如果特殊变量对应的值 > 循环的值,那么将当前值的索引放入变量中,继续向后比较
- 选择第二个值的索引赋值给特殊变量,...
def select_sort(args): """ 选择排序 :param args: 要进行排序的列表 :return: 排序之后的列表 """ for j in range(0, len(args)-1): min_val_index = j for i in range(j+1, len(args)): if args[i] < args[min_val_index]: min_val_index = i temp = args[min_val_index] args[min_val_index] = args[j] args[j] = temp return args lis = [10, 77, 12, 43, 88, 1, 8, 8, 2, 3, 6] result = select_sort(lis) print(result)
插入排序
插入排序有两个特点:
- 从前向后两两比较
- 永远保证左边是有序的
其实插入排序就是维护一个有序的序列,并且有一个人在不停的抛出新的值,然后有序的序列开始去检测新值,将其添加到有序序列中的合法位置。
def insert_sort(args): """ 插入排序 :param args: 要排序的列表 :return: 排序成功后的列表 """ for i in range(1, len(args)): for j in range(i-1, -1, -1): if args[j] > args[j+1]: temp = args[j] args[j] = args[j+1] args[j+1] = temp else: break return args