Python開発入門24 Pythonで学ぶソートの基礎と応用

Python

はじめに

Sorting Algorithms(ソートアルゴリズム)は、データを一定の規則に基づいて並べ替えるアルゴリズムです。ソートは、検索やデータの可視化、アルゴリズムのパフォーマンス向上に不可欠なステップです。

この記事では、Pythonで使用される代表的なソートアルゴリズムを基礎から学びます。さらに、それぞれのアルゴリズムの特徴、計算量、使用例を詳しく解説します。

Sorting Algorithmsの基本

ソートアルゴリズムとは

ソートアルゴリズムは、リストや配列のデータを昇順または降順に並べ替えるプロセスを指します。主な目的は次のとおりです:

  1. データの検索や処理を効率化する。
  2. データの整列による可視化や整理を行う。

Pythonでのソートの基本操作

Pythonでは、標準ライブラリを使用してソートを簡単に行えます。

numbers = [5, 2, 9, 1, 5, 6]

# 昇順ソート
sorted_numbers = sorted(numbers)
print(sorted_numbers)  # 出力: [1, 2, 5, 5, 6, 9]

# リストオブジェクトのソート
numbers.sort()
print(numbers)  # 出力: [1, 2, 5, 5, 6, 9]

代表的なSorting Algorithms

Bubble Sort

概要

Bubble Sortは、隣り合う要素を比較して順序が間違っていれば交換するアルゴリズムです。最もシンプルですが、効率は低いです。

アルゴリズムのステップ
  1. 配列の先頭から隣り合う要素を比較。
  2. 必要に応じて要素を交換。
  3. 配列が完全にソートされるまで繰り返す。
Pythonでの実装
def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                arr[j], arr[j + 1] = arr[j + 1], arr[j]

numbers = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(numbers)
print(numbers)  # 出力: [11, 12, 22, 25, 34, 64, 90]
計算量
  • 最悪ケース:O(n²)
  • 平均ケース:O(n²)

Selection Sort

概要

Selection Sortは、配列内で最小(または最大)の要素を選択して適切な位置に移動するアルゴリズムです。

アルゴリズムのステップ
  1. 配列から最小値を見つける。
  2. 最小値を先頭に移動。
  3. 残りの配列で同じ操作を繰り返す。
Pythonでの実装
def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_idx = i
        for j in range(i + 1, n):
            if arr[j] < arr[min_idx]:
                min_idx = j
        arr[i], arr[min_idx] = arr[min_idx], arr[i]

numbers = [64, 25, 12, 22, 11]
selection_sort(numbers)
print(numbers)  # 出力: [11, 12, 22, 25, 64]
計算量
  • 最悪ケース:O(n²)
  • 平均ケース:O(n²)

Insertion Sort

概要

Insertion Sortは、ソート済みの部分に新しい要素を挿入するアルゴリズムです。

アルゴリズムのステップ
  1. 2つ目の要素からスタート。
  2. 現在の要素をソート済み部分に挿入。
  3. 配列全体がソートされるまで繰り返す。
Pythonでの実装
def insertion_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >= 0 and key < arr[j]:
            arr[j + 1] = arr[j]
            j -= 1
        arr[j + 1] = key

numbers = [12, 11, 13, 5, 6]
insertion_sort(numbers)
print(numbers)  # 出力: [5, 6, 11, 12, 13]
計算量
  • 最悪ケース:O(n²)
  • 平均ケース:O(n²)

Merge Sort

概要

Merge Sortは、分割統治法を利用して配列を小さな部分に分割し、それらを統合してソートするアルゴリズムです。

アルゴリズムのステップ
  1. 配列を2つに分割。
  2. 各部分を再帰的にソート。
  3. 分割された部分を統合。
Pythonでの実装
def merge_sort(arr):
    if len(arr) > 1:
        mid = len(arr) // 2
        L = arr[:mid]
        R = arr[mid:]

        merge_sort(L)
        merge_sort(R)

        i = j = k = 0

        while i < len(L) and j < len(R):
            if L[i] < R[j]:
                arr[k] = L[i]
                i += 1
            else:
                arr[k] = R[j]
                j += 1
            k += 1

        while i < len(L):
            arr[k] = L[i]
            i += 1
            k += 1

        while j < len(R):
            arr[k] = R[j]
            j += 1
            k += 1

numbers = [12, 11, 13, 5, 6, 7]
merge_sort(numbers)
print(numbers)  # 出力: [5, 6, 7, 11, 12, 13]
計算量
  • 最悪ケース:O(n log n)
  • 平均ケース:O(n log n)

ソートアルゴリズムの比較

アルゴリズム最悪計算量平均計算量特徴
Bubble SortO(n²)O(n²)簡単だが効率が低い
Selection SortO(n²)O(n²)メモリ効率が良い
Insertion SortO(n²)O(n²)小規模データに適している
Merge SortO(n log n)O(n log n)大規模データに適している

まとめ

ソートアルゴリズムは、データを整理するための基本的な技術です。Pythonでは、標準ライブラリを使った簡単なソートから、アルゴリズムを手動で実装して仕組みを学ぶことができます。

  • 小規模データには、簡単なアルゴリズム(Bubble Sort, Insertion Sort)が適しています。
  • 大規模データには、効率の良いアルゴリズム(Merge Sort)が適しています。

本記事で紹介した内容を参考に、さまざまなソートアルゴリズムをPythonで試してみてください!

最後まで読んで頂きありがとうございます!

面白かった、参考になった、と少しでも感じて頂けましたら
ブログランキング上位になるための応援をして頂けないでしょうか!
今後も面白い記事を更新していきますので、ぜひ宜しくおねがいします!
Pythonプログラミング

コメント