Andreas Jakobsen
import time
import math
import pandas as pd
# --- Search algorithms ---
def linear_search(arr, target):
for i, value in enumerate(arr):
if value == target:
return i
return -1
def binary_search(arr, target):
left = 0
right = len(arr) - 1
while left <= right:
middle = (left + right) // 2
if target == arr[middle]:
return middle
elif target < arr[middle]:
right = middle - 1
else:
left = middle + 1
return -1
def jump_search(arr, target):
n = len(arr)
step = int(math.sqrt(n))
prev = 0
while prev < n and arr[min(step, n)-1] < target:
prev = step
step += int(math.sqrt(n))
if prev >= n:
return -1
while prev < min(step, n) and arr[prev] < target:
prev += 1
if prev == n:
return -1
if prev < n and arr[prev] == target:
return prev
return -1
# --- Benchmark ---
def benchmark(func, arr, target, repeats=100):
total = 0
for _ in range(repeats):
start = time.perf_counter()
func(arr, target)
total += time.perf_counter() - start
avg_time = (total / repeats) * 1000 # Til millisekunder
return avg_time
# --- Benchmarking ---
sizes = [1,10,11,120,121,5000,10000,100000]
data = []
for size in sizes:
arr = list(range(size)) # Sorted array
target = size * 3 + 1 # Not in array
for name, func in [
("Lineær Søgning", linear_search),
("Binær Søgning", binary_search),
("Jump-Søgning", jump_search),
]:
runtime = benchmark(func, arr, target)
data.append({
"Søgealgoritme": name,
"Inputmængde (n)": size,
"Køretid (ms)": runtime,
})
df = pd.DataFrame(data)
df.to_csv("sorteret_algoritmetest.csv", index=False)