1.冒泡排序:
比较两个不相邻下标所对应的元素,如果符合条件则交换位置
升序:长度为n的列表中进行元素排列,第一次找到最大值,固定位置n的值;第二次找到第二大值,固定位置n-1处的值,知道所有的值都被固定,则排序完成
#冒泡排序(升序) list1 = [43,545,4,124,34,323,54] for i in range(0,len(list1) - 1): #需要走几次循环 for j in range(0,len(list1) - 1 - i): if list1[j] > list1[j + 1]: list1[j],list1[j + 1] = list1[j + 1],list1[j] #交换两个值 print(list1)
2.选择排序:
固定一个下标,然后使用这个下标对应的元素和列表中其他元素进行一次对比,如果符合条件则交换位置
升序:长度为n的列表中进行元素排列,第一次找到最小值,固定位置0的值;第二次找到第二小值,固定位置1处的值,知道所有的值都被固定,则排序完成
#选择排序(升序) list1 = [43,545,4,124,34,323,54] for i in range(len(list1) - 1): #从0位置开始固定元素,外层控制轮数 for j in range(i + 1,len(list1)): #最小值在左边,一轮固定一次,直到所有都固定完成,控制每轮比较次数 if list1[i] > list1[j]: list1[i],list1[j] = list1[j],list1[i] print(list1)
3.查找:
(1)顺序查找:
遍历指定列表,依次将要查找的数据和列表中的元素进行依次对比,如果相等,则输出索引
#顺序查找 list1 = [43,545,4,124,34,323,54] keyword = 124 index = 0 #遍历列表 for i in range(len(list1)): if keyword == list1[i]: index = i print(index)
(2)二分法查找:
前提条件,必须是排好序的列表【局限性】;通过折半来缩小查找范围,提高查找效率
#二分查找[前提序列已经排序好,升序] list1 = [23,43,45,67,88,90,100] #待查找的数据 key = 43 #定义变量用于记录下标 left = 0 right = len(list1) - 1 #left和right在不断调整,当left和right相等时,说明这个列表被查找了一遍 #循环每执行一次,middle就变换一次 while left <= right: middle = (left + right) // 2 if key > list1[middle]: left = middle + 1 elif key < list1[middle]: right = middle - 1 else: print("元素下标为:",middle) #当left<right时,已经查找到了元素,此时强制停止循环 break