LoginSignup
2
2

More than 5 years have passed since last update.

ソートアルゴリズム入門 - バブルソート編 -

Posted at

はじめに

pythonの習得を兼ねて、ソートアルゴリズムを実装していきます。
他に効率的な書き方があれば、教えて下さい。

実行時間測定

定数 説明
N 要素数 10000個
LOOP 実行回数 10回
main.py
import numpy as np
import time

# sort algorithm
from bubble import sort

N = 10000
LOOP = 10
exe_times = []
arr = range(N)

for i in range(LOOP):
    np.random.shuffle(arr)
    start = time.time()

    # ソートアルゴリズム
    sort(arr)

    exe_time = time.time() - start
    exe_times.append(exe_time)

for i in range(LOOP):
    bad_array = sorted(arr, reverse=True)
    start = time.time()

    # ソートアルゴリズム
    sort(bad_array)

    exe_time = time.time() - start
    exe_times.append(exe_time)

for i in range(LOOP):
    good_array = sorted(arr)
    start = time.time()

    # ソートアルゴリズム
    sort(good_array)

    exe_time = time.time() - start
    exe_times.append(exe_time)

print("Average: {0}{1}".format(np.average(exe_times), "[sec]"))
print("Max: {0}{1}".format(np.max(exe_times), "[sec]"))
print("Min: {0}{1}".format(np.min(exe_times), "[sec]"))

バブルソート

bubble.py
def sort(array):
    length = len(array)
    while True:
        swapped = False
        for i in xrange(length-1):
            if array[i] > array[i+1]:
                array[i], array[i+1] = array[i+1], array[i]
                swapped = True
        length -= 1
        if not swapped:
            break
    return array
実行結果
Average: 5.69646668434[sec]
Max: 10.6949999332[sec]
Min: 0.0[sec]
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2