python容器的排序与查找

容器查找:要一个一个遍历。
数据结构和算法:树,图,排序、查找

import builtins

dir(builtins)#查看异常,全局函数

排序:将无序转换为有序的数据。
python自己有强大的模块:
具体实现查看地址:https://docs.python.org/zh-cn/3.7/howto/sorting.html
( list.sort() 方法只是为列表定义的,而 sorted() 函数可以接受任何可迭代对象。)

ls = [3, 2, 1, 56, 77, 21, 4357, 765, -232, 0, 99]
ls.sort()#升序排列
#ls.reverse()#倒列表实现降序
print(ls)
``

在这里插入图片描述

排序算法:冒泡排序、选择排序、插入排序 、

冒泡(二种排序:升序(从小到大,大数上浮法),降序(从大到小):升序(默认第一个数就是最大的,依次比较,发现下一个比第一个打,数进行交换)
升序:


'''
    ls富
    2021/1/18
    冒泡排序

'''
#升序(查找最大次数为列表元素-1次:恰好降序)

def asending_sort(ls):
    for i in range(len(ls)):
        #在一个循环,进行比较次数
        for j in range(len(ls)-i-1):#-1是防止下标越界,由于i增加,比较次数可以减少,增加效率
            if ls[j] > ls[j+1]:
                ls[j],ls[j+1]=ls[j+1],ls[j]
    print(ls)
if __name__ == '__main__':
    ls = [3, 2, 1, 56, 77, 21, 4357, 765, -232, 0, 99]
    asending_sort(ls)

在这里插入图片描述

降序:


'''
    ls富
    2021/1/18
    冒泡排序

'''
#升序(查找最大次数为列表元素-1次:恰好降序)

def descending_sort(ls):
    for i in range(len(ls)):
        #在一个循环,进行比较次数
        for j in range(len(ls)-i-1):#-1是防止下标越界,由于i增加,比较次数可以减少,增加效率
            if ls[j] < ls[j+1]:
                ls[j],ls[j+1]=ls[j+1],ls[j]
    print(ls)
if __name__ == '__main__':
    ls = [3, 2, 1, 56, 77, 21, 4357, 765, -232, 0, 99]
    descending_sort(ls)

在这里插入图片描述

选择排序:(每次查找找到最小值(或最大值)和后面交换:


'''
    ls富
    2021/1/18
    选择排序

'''
#升序(查找最大次数为列表元素-1次:恰好降序)
def asending_sort(ls):
    for i in range(len(ls) - 1):
        # 记录最小数的索引
        minIndex = i
        for j in range(i + 1, len(ls)):
            if ls[j] < ls[minIndex]:
                minIndex = j
        # i 不是最小数时,将 i 和最小数进行交换
        if i != minIndex:
            ls[i], ls[minIndex] = ls[minIndex], ls[i]
    return print(ls)
if __name__ == '__main__':
    ls=[22,1423,4,676,7,78,78,124]
    asending_sort(ls)


插入排序:(根据开头二个排序,导入后面的数,与前面进行比较,找到位置进行插入)


'''
    ls富
    2021/1/18
    选择排序

'''
#升序(查找最大次数为列表元素-1次:恰好降序)
def asending_sort(ls):
    for i in range(len(ls)):
        preindex = i-1
        current = ls[i]
        while preindex >= 0 and ls[preindex] > current:
            ls[preindex+1] = ls[preindex]
            preindex-=1
        ls[preindex+1] = current
    return print(ls)
if __name__ == '__main__':
    ls=[22,1423,4,676,7,78,78,124]
    asending_sort(ls)


查找:从有序数据中查一个特殊位置。
查找方法:二分查找(折半查找:保证有序,1,找到中间数(进行比较,选择一边),再循环上面操作,找到需要元素(元素越多,效率越高))

def binary_search(ls, key):
    low = 0
    high = len(ls) - 1
    time = 0
    while low < high:
        time += 1
        mid = int((low + high) / 2)
        if key < lis[mid]:
            high = mid - 1
        elif key > lis[mid]:
            low = mid + 1
        else:
            # 打印折半的次数
            print("times: %s" % time)
            return mid
    print("times: %s" % time)
    return False

if __name__ == '__main__':
    ls = [1, 5, 7, 8, 22, 54, 99, 123, 200, 222, 444]
    result = binary_search(ls, 99)
    print(result)

参考地址:https://www.cnblogs.com/feixuelove1009/p/6148357.html

你可能感兴趣的:(python练习,python)