それ,numpy で書かない?--9--
ただでさえ遅い選択ソート。
リストでやると Numpy ndarray でやるより 100 倍以上遅い。argmin を使って余計な for ループも使わずに済む。
import random
# random.randint(1, 9)で1〜9の数値を生成、for文で80000回実行
numbers = [random.randint(1, 9) for _ in range(80000)]
from time import time
def select_sort(data: list[int]) -> list[int]:
len_data = len(data) # 配列の長さ
for i in range(len_data): # リストの各位置に対して最小値を見つけ、その位置と交換するため
min_index = i # 初期値
for j in range(i + 1, len_data): # iより後ろの要素の中から最小値を見つけるため
if data[j] < data[min_index]:
min_index = j
data[i], data[min_index] = data[min_index], data[i]
data = numbers.copy()
s = time()
select_sort(data)
print(time() - s)
80.99239301681519
import numpy as np
def selection_sort(arr):
for i in range(len(arr)):
min_idx = np.argmin(arr[i:])
arr[i], arr[i+min_idx] = arr[i+min_idx], arr[i]
data2 = np.array(numbers.copy())
s = time()
selection_sort(data2)
print(time() - s)
0.7172000408172607