1.冒泡排序:
从第一个位置开始,两两进行比较 a=[5,3,8,9,1] 如果前者大于后者就交换位置
第一次交换 5与3比较 交换位置, 5与8比较,不交换位置,8与 9比较 不交换位置 9与1比较,交换位置
这样第一次'排序',得出了最大值。
第二次交换。 3与5比较,不交换 5与8比较,不交换 8与1 比较 交换位置、 得到次大值
········
list0=[12,51,32,23,21,80,19,78,2]
for out in range(1,len(list0)):
for i in range(len(list0)-out):
if list0[i]>list0[i+1]:
list0[i],list0[i+1]=list0[i+1],list0[i]
print(list0)
2.选择排序:
从第一个位置开始,与后面每个位置的数比较,比较出最小值,放到第一位
从第二个位置开始,与后面每个位置的数比较,比较出次小值, 放到第二位
......
list0=[12,51,32,23,21,80,19,78,2]
for out in range(len(list0)-1):
for i in range(out+1,len(list0)):
if list0[out]>list0[i]:
list0[i],list0[out]=list0[out],list0[i]
print(list0)
3.插入排序:
从第二个位置开始,跟第一个位置比较,如果前者小于后者,交换位置
从第三个位置开始,跟第二个位置比较,如果前者小于后者,交换位置,然后再与第一个位置比较,如果前者小于后者,交换位置。
.....
每一次排序都是,排完的前面数据是有序的,所以插入排序是部分有序的
list0=[12,51,32,23,21,80,19,78,2]
for out in range(1,len(list0)):
for i in range(out,0,-1):
if list0[i]<list0[i-1]:
list0[i],list0[i-1]=list0[i-1],list0[i]
else :
break
print(list0)
4.二分法查找
局限性比较大,只适用于 升序或者降序序列 。
规则:
先设定一个查找区间(用索引设定),初始索引 [0, len(列表) - 1]
获得中间索引mid,判断中间索引对应元素是否与要查找元素key相等
不相等,继续查找
key < list[mid] 更新区间,缩小查找区间 [0, mid - 1]
key > list[mid] 更新区间,缩小查找区间 [mid + 1, len(列表) - 1]
升序时的查找算法:
list0 = [12, 34, 57, 81, 96, 108]
list0.sort()
key_item = 109 #设定待查找元素
min_index = 0 #设置初始查找区间
max_index = len(list0) - 1
mid_index = (min_index + max_index) // 2#获得中间索引
#重复查找操作
while list0[mid_index] != key_item:
if key_item > list0[mid_index]:
min_index = mid_index + 1
elif key_item < list0[mid_index]:
max_index = mid_index - 1
#区间发生变化 盘判断区间是否合理
if max_index >= min_index:
#更新中间索引 再去重新查找
mid_index = (min_index + max_index) // 2
else:
#区间不合理
print("对不起, 没有该元素")
break # 不用再继续查找
else:
#找到了
print("%d在列表的%d位置处" % (key_item, mid_index))
降序时的查找算法:
list0 = [12, 34, 57, 81, 96, 108]
list0.sort()
key_item = 109 #设定待查找元素
min_index = 0 #设置初始查找区间
max_index = len(list0) - 1
mid_index = (min_index + max_index) // 2#获得中间索引
#重复查找操作
while list0[mid_index] != key_item:
if key_item > list0[mid_index]:
max_index=mid_index-1
elif key_item < list0[mid_index]:
min_index=mid_index+1
#区间发生变化 盘判断区间是否合理
if max_index >= min_index:
#更新中间索引 再去重新查找
mid_index = (min_index + max_index) // 2
else:
#区间不合理
print("对不起, 没有该元素")
break # 不用再继续查找
else:
#找到了
print("%d在列表的%d位置处" % (key_item, mid_index))