1

我已经为计算机科学课程编写了 Timsort 排序算法,我希望能够将运行时与其他类似算法进行比较,例如归并排序。但是,我不确定应该在代码中的何处放置计数(即:count +=1)以获得准确的运行时间。任何帮助将非常感激。

RUN = 32


def insertion_sort(arr, left, right):
    for i in range(left + 1, right + 1):
        temp = arr[i]
        j = i - 1

        while (arr[j] > temp and j >= left):
            arr[j + 1] = arr[j]
            arr[j] = temp
            j -= 1


def merge(arr, left, right, count):
    c = 0
    index = count
    length = len(left) + len(right)

    while left and right:
        if left[0] < right[0]:
            arr[index] = left.pop(0)
            c += 1
            index += 1

        else:
            arr[index] = right.pop(0)
            c += 1
            index += 1

    if len(left) == 0:
        while c < length:
            arr[index] = right.pop(0)
            c += 1
            index += 1

    elif len(right) == 0:
        while c < length:
            arr[index] = left.pop(0)
            c += 1
            index += 1


def tim_sort(arr):
    n = len(arr)

    for i in range(0, n, RUN):
    insertion_sort(arr, i, min((i + (RUN - 1)), (n - 1)))
    size = RUN
    while size < n:

        for left in range(0, n, 2 * size):
            if (left + size > n):
                merge(arr, arr[left:n], [], left)
            else:

                left_sub_arr = arr[left:(left + size)]
                right_sub_arr = arr[(left + size):min((left + 2 * size), n)]
                merge(arr, left_sub_arr, right_sub_arr, left)

        size *= 2

    return arr
4

0 回答 0