Back to Home

ការតម្រៀបបែបធីម

ក្បួនដោះស្រាយការតម្រៀបថេររួមបញ្ចូលគ្នា ដែលរចនាឡើងដើម្បីអនុវត្តបានល្អលើទិន្នន័យពិតប្រាកដ។

Visualization

Step 1 / 6
Speed:

Details

Analogy

ស្រមៃថាការរៀបចំបណ្ណាល័យធំ។ ជំនួសឱ្យការតម្រៀបសៀវភៅទាំងអស់ អ្នកចែកពួកវាទៅក្នុងផ្នែកតូចៗ តម្រៀបផ្នែកនីមួយៗ រួចបញ្ចូលពួកវា។

Purpose

ដើម្បីតម្រៀបទិន្នន័យយ៉ាងមានប្រសិទ្ធភាព ដោយប្រើចំណុចខ្លាំងនៃការតម្រៀបបញ្ចូល និងការតម្រៀបបញ្ចូលគ្នា។

Use Cases

ក្បួនដោះស្រាយលំនាំដើមក្នុង Python និង Java។ ល្អសម្រាប់ទិន្នន័យពិតប្រាកដ។

Algorithm Steps

Line 1
1
function timSort(array):
2
RUN = 32
3
n = length(array)
4
for start = 0 to n step RUN:
5
end = min(start + RUN - 1, n - 1)
6
insertionSort(array, start, end)
7
size = RUN
8
while size < n:
9
for start = 0 to n step 2 * size:
10
mid = start + size - 1
11
end = min(start + 2 * size - 1, n - 1)
12
if mid < end:
13
merge(array, start, mid, end)
14
size = size * 2
15
return array
Current
Executed
Pending

Explanation

What's Happening?

Step 1/6

អារេដំបូង: [5, 21, 7, 23, 19, 3, 16, 8]។ RUN = 32។

Updates with each step • Clickfor full view

Code Implementation

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

def merge(arr, left, mid, right):
    left_part = arr[left:mid + 1]
    right_part = arr[mid + 1:right + 1]

    i = j = 0
    k = left

    while i < len(left_part) and j < len(right_part):
        if left_part[i] <= right_part[j]:
            arr[k] = left_part[i]
            i += 1
        else:
            arr[k] = right_part[j]
            j += 1
        k += 1

    while i < len(left_part):
        arr[k] = left_part[i]
        i += 1
        k += 1

    while j < len(right_part):
        arr[k] = right_part[j]
        j += 1
        k += 1

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

    for start in range(0, n, RUN):
        end = min(start + RUN - 1, n - 1)
        insertion_sort(arr, start, end)

    size = RUN
    while size < n:
        for start in range(0, n, 2 * size):
            mid = start + size - 1
            end = min(start + 2 * size - 1, n - 1)

            if mid < end:
                merge(arr, start, mid, end)

        size *= 2

    return arr
ការតម្រៀបបែបធីម - Interactive Visualization | AlgoViz | AlgoViz