プログラマーがマスターしなければならないソート アルゴリズムのトップ 10 (パート 2)
ソートアルゴリズムすべてのプログラマーがマスターした後に必ず持っていると言えるでしょう。 、その原理と実装を理解する必要があります。.以下は、学習を容易にする、最も一般的に使用される 10 個の並べ替えアルゴリズムの Python 実装の紹介です。 . .
# 05 インサーションソート - インサーションクラスソート
06 ヒルソート - インサーションクラスソート
##07 マージソート - マージソートソート
##08 個数ソート - 分布ソート
# 09 基数ソート - 分布ソート 10 バケット ソート - 分布クラス ソート
- より小さい整数のギャップ (ギャップをステップ サイズと呼びます) をとり、並べ替える要素をいくつかのグループに分割します後続では、距離がギャップの倍数であるすべてのレコードが同じグループに配置されます。
各グループ内の要素に対して直接挿入ソートを実行します。今回は、ソートが完了すると、各グループの要素が順序付けされます。
-
ギャップ値を減らし、上記のグループ化とソートを繰り返します
-
上記の操作を繰り返し、gap=1 でソート終了
##
'''希尔排序''' def Shell_Sort(arr): # 设定步长,注意类型 step = int(len(arr) / 2) while step > 0: for i in range(step, len(arr)): # 类似插入排序, 当前值与指定步长之前的值比较, 符合条件则交换位置 while i >= step and arr[i - step] > arr[i]: arr[i], arr[i - step] = arr[i - step], arr[i] i -= step step = int(step / 2) return arr arr = [29, 63, 41, 5, 62, 66, 57, 34, 94, 22] result = Shell_Sort(arr) print('result list: ', result) # result list: [5, 22, 29, 34, 41, 57, 62, 63, 66, 94]
- そのサイズが 2 つの並べ替えられたシーケンスの合計になるように、スペースを適用します。このスペースは、マージされたシーケンスを保存するために使用されます。シーケンス
は 2 つのインデックスを設定します。最初の
インデックス - 位置は、2 つの並べ替えられたシーケンス
## の開始位置です。 # 2 つの
インデックス が指す要素を比較し、比較的小さい要素を選択してマージ スペースに配置し、 - インデックス
を次の場所に移動します。次の位置##特定の index
がシーケンスの終わりを超えるまで前のステップを繰り返します #他のシーケンスの残りのすべての要素をマージされたシーケンスの最後に直接コピーします
'''归并排序'''def Merge(left, right): arr = [] i = j = 0 while j < len(left) and i < len(right): if left[j] < right[i]: arr.append(left[j]) j += 1 else: arr.append(right[i]) i += 1 if j == len(left): # right遍历完 for k in right[i:]: arr.append(k) else: # left遍历完 for k in left[j:]: arr.append(k) return arr def Merge_Sort(arr): # 递归结束条件 if len(arr) <= 1: return arr # 二分 middle = len(arr) // 2 left = Merge_Sort(arr[:middle]) right = Merge_Sort(arr[middle:]) # 合并 return Merge(left, right) arr = [27, 70, 34, 65, 9, 22, 47, 68, 21, 18] result = Merge_Sort(arr) print('result list: ', result) # result list: [9, 18, 21, 22, 27, 34, 47, 65, 68, 70]
找出待排序的数组中最大和最小的元素
统计数组中每个值为i的元素出现的次数,存入数组C的第i项
对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)
反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1
'''计数排序''' def Count_Sort(arr): max_num = max(arr) min_num = min(arr) count_num = max_num - min_num + 1 count_arr = [0 for i in range(count_num)] res = [0 for i in range(len(arr))] # 统计数字出现的次数 for i in arr: count_arr[i - min_num] += 1 # 统计前面有几个比自己小的数 for j in range(1, count_num): count_arr[j] = count_arr[j] + count_arr[j - 1] # 遍历重组 for k in range(len(arr)): res[count_arr[arr[k] - min_num] - 1] = arr[k] count_arr[arr[k] - min_num] -= 1 return res arr = [5, 10, 76, 55, 13, 79, 5, 49, 51, 65, 30, 5] result = Count_Sort(arr) print('result list: ', result) # result list: [5, 5, 5, 10, 13, 30, 49, 51, 55, 65, 76, 79]
根据个位数的数值,遍历列表将它们分配至编号0到9的桶子中
将这些桶子中的数值重新串接起来
根据十位数的数值,遍历列表将它们分配至编号0到9的桶子中
再将这些桶子中的数值重新串接起来
'''基数排序''' def Radix_Sort(arr): max_num = max(arr) place = 0 while 10 ** place <= max_num: # 创建桶 buckets = [[] for _ in range(10)] # 分桶 for item in arr: pos = item // 10 ** place % 10 buckets[pos].append(item) j = 0 for k in range(10): for num in buckets[k]: arr[j] = num j += 1 place += 1 return arr arr = [31, 80, 42, 47, 35, 26, 10, 5, 51, 53] result = Radix_Sort(arr) print('result list: ', result) # result list: [5, 10, 26, 31, 35, 42, 47, 51, 53, 80]
计算有限桶的数量
逐个桶内部排序
遍历每个桶,进行合并
'''桶排序''' def Bucket_Sort(arr): num = max(arr) # 列表置零 pre_lst = [0] * num result = [] for data in arr: pre_lst[data - 1] += 1 i = 0 while i < len(pre_lst): # 遍历生成的列表,从小到大 j = 0 while j < pre_lst[i]: result.append(i + 1) j += 1 i += 1 return result arr = [26, 53, 83, 86, 5, 46, 5, 72, 21, 4, 75] result = Bucket_Sort(arr) print('result list: ', result) # result list: [4, 5, 5, 21, 26, 46, 53, 72, 75, 83, 86]
以上がプログラマーがマスターしなければならないソート アルゴリズムのトップ 10 (パート 2)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

1. 問題の背景 1. 両面市場実験の概要 両面市場、つまりプラットフォームには、生産者と消費者の 2 つの参加者が含まれ、双方がお互いを促進します。たとえば、Kuaishou にはビデオ制作者とビデオ消費者がおり、この 2 つのアイデンティティはある程度重複する可能性があります。バイラテラル実験とは、生産者側と消費者側のグループを組み合わせた実験手法です。双方向実験には以下のようなメリットがあります。 (1) 製品の DAU や作品アップロード者数の変化など、新たな戦略による 2 つの側面への影響を同時に検出できます。二国間プラットフォームには多くの場合クロスサイドネットワーク効果があり、読者が増えれば増えるほど著者の活動が活発になり、著者の活動が活発になればなるほど、より多くの読者がフォローするようになります。 (2) エフェクトのオーバーフローや転送を検出できます。 (3) 作用機序をより深く理解するのに役立ちます。AB 実験自体は、原因と結果の関係を伝えることはできません。

Vue テクノロジ開発でデータをフィルタリングおよび並べ替える方法 Vue テクノロジ開発では、データのフィルタリングと並べ替えは非常に一般的で重要な機能です。データのフィルタリングと並べ替えを通じて、必要な情報を迅速にクエリして表示できるため、ユーザー エクスペリエンスが向上します。この記事では、Vue でデータをフィルターおよび並べ替える方法を紹介し、読者がこれらの関数をよりよく理解して使用できるように具体的なコード例を示します。 1. データのフィルタリング データのフィルタリングとは、特定の条件に基づいて要件を満たすデータをフィルタリングすることを指します。 Vue では、comp を渡すことができます

C++ で基数ソート アルゴリズムを使用する方法 基数ソート アルゴリズムは、並べ替える要素を限られた桁のセットに分割することによって並べ替えを完了する非比較並べ替えアルゴリズムです。 C++ では、基数ソート アルゴリズムを使用して整数のセットをソートできます。以下では、特定のコード例を使用して、基数ソート アルゴリズムを実装する方法を詳しく説明します。アルゴリズムのアイデア 基数ソート アルゴリズムのアイデアは、ソート対象の要素を限られたデジタル ビットのセットに分割し、各ビットで順番に要素をソートすることです。各ビットのソートが完了しました

選択ソート アルゴリズムを C# で実装する方法 選択ソート (SelectionSort) は、単純で直感的なソート アルゴリズムであり、その基本的な考え方は、毎回ソートする要素から最小 (または最大) の要素を選択し、それを最後に配置することです。ソートされたシーケンス。すべての要素が並べ替えられるまで、このプロセスを繰り返します。 C# で選択並べ替えアルゴリズムを実装する方法と、具体的なコード例について詳しく学びましょう。選択ソートメソッドの作成 まず、選択ソートを実装するメソッドを作成する必要があります。このメソッドは、

並べ替え | Nuka-Cola、Chu Xingjuan 基本的なコンピューター サイエンスのコースを受講した友人なら、並べ替えアルゴリズムを個人的に設計したはずです。つまり、コードを使用して、順序なしリスト内の項目を昇順または降順に並べ替えます。これは興味深い挑戦であり、実現する方法はたくさんあります。並べ替えタスクをより効率的に実行する方法を見つけるために、多くの時間が費やされてきました。基本的な操作として、並べ替えアルゴリズムはほとんどのプログラミング言語の標準ライブラリに組み込まれています。オンラインで大量のデータを整理するために、世界中のコードベースでさまざまなソート手法やアルゴリズムが使用されていますが、少なくとも LLVM コンパイラで使用される C++ ライブラリに関する限り、ソート コードは 10 年以上変わっていません。 。最近、Google DeepMindAI チームは、

Swoole は、PHP 言語をベースとした高性能ネットワーク通信フレームワークで、複数の非同期 IO モードと複数の高度なネットワーク プロトコルの実装をサポートしています。 Swoole をベースとして、そのマルチスレッド機能を使用して、高速ソート アルゴリズムなどの効率的なアルゴリズム操作を実装できます。高速ソートアルゴリズム (QuickSort) は一般的なソートアルゴリズムであり、ベンチマーク要素を配置すると、要素が 2 つの部分列に分割され、ベンチマーク要素より小さいものは左側に配置され、ベンチマーク以上の要素は左に配置されます。要素が右側に配置され、次に左右のサブシーケンスが配置されます。

さまざまなシナリオでは、適切な PHP 配列ソート アルゴリズムを選択することが重要です。バブル ソートは安定性を必要としない小規模な配列に適しており、クイック ソートは安定性が高く、安定性を必要としない状況に適しています。 ; ヒープソートは最大値または最小値を効率的に見つけます。実際のケースを比較すると、時間効率の点ではクイックソートが他のアルゴリズムより優れていますが、安定性を考慮する必要がある場合はマージソートを選択する必要があります。

配列ソートアルゴリズムは、要素を特定の順序で配置するために使用されます。一般的なアルゴリズムの種類は次のとおりです。 バブル ソート: 隣接する要素を比較して位置を交換します。選択ソート: 最小の要素を見つけて、それを現在の位置に入れ替えます。挿入ソート: 要素を 1 つずつ正しい位置に挿入します。クイックソート: 分割統治法。配列を分割するピボット要素を選択します。マージソート: 分割統治、再帰的ソート、およびサブ配列のマージ。
