Pythonコンテナの並べ替えと検索

コンテナ検索:1つずつトラバースします。
データ構造とアルゴリズム:ツリー、グラフ、並べ替え、検索

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

ここに画像の説明を挿入します

ソートアルゴリズム:バブルソート、選択ソート、挿入ソート、

バブリング(2つの種類:昇順(小さいものから大きいものへ、大きい数字に浮かぶ))、降順(大きいものから小さいものへ):昇順(最初の数字はデフォルトで最大です。順番に比較して、次の数字がより高いことを確認してください)最初のもの。交換される番号)
昇順:


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


挿入ソート:(最初の2つのソートに従って、次の番号をインポートし、前面と比較して、挿入する位置を見つけます)


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

おすすめ

転載: blog.csdn.net/weixin_47514459/article/details/112791073