😮

[ChatGPT]ソートプログラムをPythonで書いてもらう

2023/02/09に公開

はじめに

ChatGPT(対話型のテキスト生成ツール)サービスでソートプログラムをPythonで書いてもらいました。
対象は「バブルソート」「マージソート」「クイックソート」です。

ここでは前提として
・ChatGPTのアカウントを持っている
・Python3がインストールされている。
こととします。

(参考)ChatGPTのホームページ
https://openai.com/blog/chatgpt/

1.バブルソートの作成

ChatGPTで以下のように質問します。

>>10個の数列のバブルソートをPythonで書いて

ChatGPTは以下のように回答してくれました。

>>こちらが、10個の数列をバブルソートするPythonのプログラムです。
bubblesort.py
def bubble_sort(array):
    n = len(array)
    for i in range(n):
        for j in range(0, n - i - 1):
            if array[j] > array[j + 1]:
                array[j], array[j + 1] = array[j + 1], array[j]
    return array

array = [64, 34, 25, 12, 22, 11, 90, 1, 3, 2]
print("Before sorting: ", array)
array = bubble_sort(array)
print("After sorting: ", array)

以下CharGPTの補足です。(改行は適当にしています)

>>このプログラムでは、隣り合う要素を比較して、大きい方を右に移動する操作を繰り返します。
>>同じ操作を繰り返す回数は配列の要素数分です。これを繰り返すことで、
>>最終的に昇順にソートされた配列が得られます。

回答をコピーしてPythonで実行します。

python3 bubblesort.py
Before sorting:  [64, 34, 25, 12, 22, 11, 90, 1, 3, 2]
After sorting:  [1, 2, 3, 11, 12, 22, 25, 34, 64, 90]

正しくソートされています。

2.マージソートの作成

ChatGPTで以下のように質問します。

>>10個の数列のマージソートをPythonで書いて

ChatGPTは以下のように回答してくれました。

>>こちらが、10個の数列をマージソートするPythonのプログラムです。
mergesort.py
def merge_sort(array):
    if len(array) > 1:
        mid = len(array) // 2
        left_array = array[:mid]
        right_array = array[mid:]
        merge_sort(left_array)
        merge_sort(right_array)
        i = j = k = 0
        while i < len(left_array) and j < len(right_array):
            if left_array[i] < right_array[j]:
                array[k] = left_array[i]
                i += 1
            else:
                array[k] = right_array[j]
                j += 1
            k += 1
        while i < len(left_array):
            array[k] = left_array[i]
            i += 1
            k += 1
        while j < len(right_array):
            array[k] = right_array[j]
            j += 1
            k += 1
    return array

array = [64, 34, 25, 12, 22, 11, 90, 1, 3, 2]
print("Before sorting: ", array)
array = merge_sort(array)
print("After sorting: ", array)

以下CharGPTの補足です。(改行は適当にしています)

>>このプログラムでは、配列を再帰的に分割する方法を用いて昇順にソートします。
>>まず、配列を半分に分割します。次に、分割した配列を再帰的に分割していきます。
>>分割が終わったら、配列をマージ(結合)していきます。
>>このような方法を繰り返すことで、最終的に昇順にソートされた配列が得られます。

回答をコピーしてPythonで実行します。

python3 mergesort.py 
Before sorting:  [64, 34, 25, 12, 22, 11, 90, 1, 3, 2]
After sorting:  [1, 2, 3, 11, 12, 22, 25, 34, 64, 90]

正しくソートされています。

3.クイックソートの作成

ChatGPTで以下のように質問します。

>>10個の数列のクイックソートをPythonで書いて

ChatGPTは以下のように回答してくれました。

>>こちらが、10個の数列をクイックソートするPythonのプログラムです。
quicksort.py
def quick_sort(array, low, high):
    if low < high:
        pivot_index = partition(array, low, high)
        quick_sort(array, low, pivot_index - 1)
        quick_sort(array, pivot_index + 1, high)

def partition(array, low, high):
    pivot = array[high]
    i = low - 1
    for j in range(low, high):
        if array[j] <= pivot:
            i = i + 1
            array[i], array[j] = array[j], array[i]
    array[i + 1], array[high] = array[high], array[i + 1]
    return i + 1

array = [64, 34, 25, 12, 22, 11, 90, 1, 3, 2]
print("Before sorting: ", array)
quick_sort(array, 0, len(array) - 1)
print("After sorting: ", array)

以下CharGPTの補足です。(改行は適当にしています)

>>このプログラムでは、配列を再帰的に分割する方法を用いて昇順にソートします。
>>まず、配列内の数値の中から一つをピボットとして選び、
>>ピボットより小さい値は左側に、大きい値は右側に配置します。
>>次に、このピボットで分割した左右の配列を再帰的に分割していきます。
>>このような方法を繰り返すことで、最終的に昇順にソートされた配列が得られます。

回答をコピーしてPythonで実行します。

python3 quicksort.py 
Before sorting:  [64, 34, 25, 12, 22, 11, 90, 1, 3, 2]
After sorting:  [1, 2, 3, 11, 12, 22, 25, 34, 64, 90]

正しくソートされています。

Discussion