ツールバーの


¥¥¥¥¥¥¥¥
間違ったところがあったら教えてください.🙏

ツールバーの


ツールバーの


値を特定の順序で配置するアルゴリズム.
通常、数字順(Numerical Order)と辞書順(Lexicographic Order)で並べ替えられます.

泡の位置を合わせる


横の値と比較して、サイズは右、小は左に並べ替えられます.配列全体を表示するので、時間の複雑さは常にO(n**2)です.
他のアルゴリズムに比べて、非常に非効率なアルゴリズムです.

連結ソケット


ほとんどの場合、高速ソートよりも遅いが、実行速度は一定である(しばしばO(nlogn)であり、安定したソートである).
ただし、データは個別のストレージスペースに格納され続け、スペースが不足している場合はクイックソートを使用します.
分割後、並べ替えてマージする分割征服アルゴリズム.

クイックソート


これは,軸心(基準点)を決定することにより,軸心より小さい場合に左,大,右と同様にパーティション化するアルゴリズムである.
これは非常に高速で効率的なアルゴリズム(平均O(nlogn))ですが、最悪の場合はO(n**2)になります.ソートされた配列を入力すると、パーティション化は行われないため、バブルソートと区別されません.
マージソートのように分割した後、並べ替えてマージする分割征服アルゴリズム.

チームスイート(Timsort)

  • Pythonで使用されるソートアルゴリズム
  • C実装アルゴリズム
  • は、「実際のデータの大部分がソートされている」と仮定する
  • マージ+挿入ソート、合計
  • ソート解除


    質問2751


    ▼▼▼▼▼私が書いたコード
    import sys
    
    N = int(input())
    s = list(map(int,sys.stdin.readlines()))
    s.sort()
    for i in s: print(i)
    readline
    行単位の読み取り
    readlines
    リスト内の要素として各ローを受信
    read
    すべてのローを一度に読み込む

    問題11650


    ▼▼▼▼▼私が書いたコード
    import sys
    
    N = int(input())
    point_xy = []
    
    
    for _ in range(N):
        x, y = map(int, sys.stdin.readline().split())
        point_xy.append([x, y])
    
    sorted_xy = sorted(point_xy)
    
    for i in sorted_xy:
        print(i[0],i[1])
    sorted
    pythonでは、sordedは新しいリストを作成してソートし、ユーザーは自分でソート基準を決定することができます.この問題のように、[[a,b],[c,d],[e,f]]で使用すると、最初の要素をソートしようとします.要素の値が同じであれば、次の要素をソートします.
    Reference

    問題11651


    ▼▼▼▼▼私が書いたコード
    import sys
    
    N = int(input())
    point_yx = []
    
    
    for _ in range(N):
        x, y = map(int, sys.stdin.readline().split())
        point_yx.append([y, x])
    
    sorted_yx = sorted(point_yx)
    
    for i in sorted_yx:
        print(i[1],i[0])
    上記の問題では,xとyの位置を変えるだけでよい.

    問題11651


    ▼▼▼▼▼私が書いたコード
    import sys
    from operator import itemgetter
    
    
    N = int(input())
    member = []
    
    for _ in range(N):
        age, name = sys.stdin.readline().split()
        member.append([int(age), name])
    
    sorted_mem = sorted(member, key=itemgetter(0))
    
    for i in sorted_mem:
        print(i[0],i[1])
    Pythonでは、ソート関数にはkeyというパラメータがあり、operatorモジュールを使用して、複数のソート時にどの値に基づいてソートされるかを決定できます.
    上記の問題では、ageを基準として並べ替えを試み、条件は나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬である.Pythonでのソートは元の順序を保証し,加入順序を保証した.
    Reference

    質問10825


    ▼▼▼▼▼私が書いたコード
    import sys
    
    N = int(input())
    result = []
    
    for _ in range(N):
        name, kor, eng, math  = sys.stdin.readline().split()
        result.append([name, kor, eng, math])
    
    result.sort(key = lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0]))
    
    for i in result:
        print(i[0])
    sortedで使用可能なパラメータは、sortでも使用可能である.また、itemgetterは複数の条件で使用可能であるが、これらの問題では条件毎の減少と増加が異なるため、lambda式が用いられる.
    import sys
    from operator import itemgetter
    
    N = int(input())
    result = []
    
    for _ in range(N):
        name, kor, eng, math  = sys.stdin.readline().split()
        result.append([name, 100-int(kor), int(eng), 100-int(math)])
    
    result.sort(key = itemgetter(1,2,3,0))
    
    for i in result:
        print(i[0])
    もちろん、上記のようにitemgetterを用いてもよい.

    質問10989


    ▼▼▼▼▼私が書いたコード
    import sys
    
    N = int(input())
    arr = [0]*10001
    for _ in range(N):
        arr[int(sys.stdin.readline())] +=1
    
    for i in range(10001): 
        if arr[i] != 0:
            for _ in range(arr[i]):
                print(i)
    メモリ過剰の問題を解決することが重要です.readlinesを受け取っても、2回のリストが表示され、メモリが超過している場合があります.
    解決策は、上記のコードのように、リスト内のインデックスを入力値と見なして何度も繰り返し、リスト内の対応するインデックスに書き込むことです.

    問題11652


    ▼▼▼▼▼私が書いたコード
    import sys
    from collections import Counter
    
    N = int(input())
    card = list(map(int, sys.stdin.readlines()))
    cnt = Counter(sorted(card))
    print(cnt.most_common(1)[0][0])
    Countermost_commonを最大限利用して解答したいと思います.
    まずcardを並べ替え,条件下で가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력を解決した.
    その後はmost_commonパラメータを簡単に使えばよい.most_commonを参照し、同じ値であれば優先的に入力される値.
    Reference

    問題11004


    ▼▼▼▼▼私が書いたコード
    N, K= map(int, input().split())
    arr = list(map(int, input().split()))
    arr.sort()
    print(arr[K-1])