😮
[ChatGPT]ソートプログラムをPythonで書いてもらう
はじめに
ChatGPT(対話型のテキスト生成ツール)サービスでソートプログラムをPythonで書いてもらいました。
対象は「バブルソート」「マージソート」「クイックソート」です。
ここでは前提として
・ChatGPTのアカウントを持っている
・Python3がインストールされている。
こととします。
(参考)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