Python学习第六天----常用排序算法与二分法查找算法

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))

猜你喜欢

转载自blog.csdn.net/qq_33407999/article/details/81410955
今日推荐