Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Czym jest MergeSort? Kiedy i przez kogo został stworzony? Jak dokładnie działa MergeSort?

Ta treść została automatycznie przetłumaczona z ukraińskiego.
MergeSort - to efektywny algorytm sortowania, który wykorzystuje zasadę "dziel i rządź". Opiera się na pomyśle podziału wejściowej tablicy na mniejsze części, sortowania każdej części osobno, a następnie łączenia ich w posortowaną tablicę.
Główna idea MergeSort polega na podziale wyjściowej tablicy na pół, aż do osiągnięcia przypadku bazowego, gdy w tablicy pozostaje tylko jeden lub żaden element. Następnie proces scalania (merge) zaczyna się od połączenia dwóch posortowanych części w nową posortowaną tablicę. Proces ten powtarza się rekursywnie do całkowitego połączenia wszystkich części w jedną posortowaną tablicę.
Jedną z głównych zalet MergeSort jest to, że zawsze działa z złożonością czasową O(n log n), gdzie n to liczba elementów w wyjściowej tablicy. Czyni to go efektywnym do sortowania dużych zbiorów danych.

Kiedy i przez kogo stworzono MergeSort?

MergeSort został opracowany przez Johna von Neumanna w 1945 roku. Jednak jego publikacja miała miejsce później, w 1948 roku, kiedy jego kolega Hermann Goldstine opisał pracę von Neumanna podczas wykładu na posiedzeniu Matematycznego Towarzystwa Ameryki. W ten sposób algorytm MergeSort zaczął zyskiwać na popularności i stał się ważną częścią współczesnej wiedzy algorytmicznej i informatyki.
Von Neumann był wybitnym matematykiem, fizykiem, informatykiem i inżynierem elektrykiem. Wniósł znaczący wkład w rozwój teorii obliczeń, architektury komputerów oraz metod numerycznych. MergeSort jest jednym z algorytmów sortowania, które opracował i stał się podstawą dla licznych wariantów i optymalizacji, które są stosowane do dziś.

Przykład algorytmu MergeSort (JavaScript).

function mergeSort(arr) {
  if (arr.length <= 1) {
    return arr;
  }
  
  const mid = Math.floor(arr.length / 2);
  const left = arr.slice(0, mid);
  const right = arr.slice(mid);
  
  return merge(mergeSort(left), mergeSort(right));
}

function merge(left, right) {
  const mergedArr = [];
  let i = 0;
  let j = 0;
  
  while (i < left.length && j < right.length) {
    if (left[i] <= right[j]) {
      mergedArr.push(left[i]);
      i++;
    } else {
      mergedArr.push(right[j]);
      j++;
    }
  }
  
  while (i < left.length) {
    mergedArr.push(left[i]);
    i++;
  }
  
  while (j < right.length) {
    mergedArr.push(right[j]);
    j++;
  }
  
  return mergedArr;
}

// Przykład użycia
const arr = [8, 5, 2, 9, 1, 7, 6, 3];
const sortedArr = mergeSort(arr);
console.log(sortedArr);
Wynik:
[1, 2, 3, 5, 6, 7, 8, 9]
Funkcja mergeSort() rekurencyjnie dzieli wejściową tablicę na pół, sortuje każdą połowę wywołując mergeSort(), a następnie łączy je za pomocą funkcji merge(). Funkcja merge() scala dwie posortowane tablice w jedną posortowaną tablicę, porównując elementy z obu tablic.

Przykład algorytmu MergeSort (Ruby).

def merge_sort(arr)
  return arr if arr.length <= 1

  mid = arr.length / 2
  left = arr[0...mid]
  right = arr[mid..-1]

  merge(merge_sort(left), merge_sort(right))
end

def merge(left, right)
  merged_arr = []
  i = 0
  j = 0

  while i < left.length && j < right.length
    if left[i] <= right[j]
      merged_arr << left[i]
      i += 1
    else
      merged_arr << right[j]
      j += 1
    end
  end

  while i < left.length
    merged_arr << left[i]
    i += 1
  end

  while j < right.length
    merged_arr << right[j]
    j += 1
  end

  merged_arr
end

# Przykład użycia
arr = [8, 5, 2, 9, 1, 7, 6, 3]
sorted_arr = merge_sort(arr)
puts sorted_arr
Wynik:
[1, 2, 3, 5, 6, 7, 8, 9]
Funkcja merge_sort() rekurencyjnie dzieli wejściową tablicę na pół, sortuje każdą połowę wywołując merge_sort(), a następnie łączy je za pomocą funkcji merge(). Funkcja merge() scala dwie posortowane tablice w jedną posortowaną tablicę, porównując elementy z obu tablic.

Ten post nie ma jeszcze żadnych dodatków od autora.

26 cze 03:52

Co to jest PCIe (Peripheral Component Interconnect Express)?

meme code
meme code@memecode
26 cze 05:44

Czym jest Ubuntu Pro? Jaka jest różnica między Ubuntu a Ubuntu Pro?

meme code
meme code@memecode
26 cze 05:44

Ostatni etap instalacji Ubuntu. Ustawienia po instalacji Ubuntu.

meme code
meme code@memecode
29 cze 13:20

Co to jest ASC i DESC? Jaka jest różnica? Przykłady użycia w SQL, JavaScript i Ruby.

meme code
meme code@memecode
30 cze 10:07

Czym jest QuickSort? Kiedy i przez kogo został stworzony? Jak dokładnie działa QuickSort?

meme code
meme code@memecode
30 cze 10:50

Czym jest rekursja? Przykład rekursji w życiu codziennym. Skutki nieskończonej rekursji.

meme code
meme code@memecode
30 cze 12:15

Jaka jest różnica między QuickSort a MergeSort?

meme code
meme code@memecode
3 lip 05:03

Czym jest MS-DOS? Kiedy i przez kogo stworzono MS-DOS?

meme code
meme code@memecode
3 lip 06:45

Czym jest API (Interfejs Programowania Aplikacji)?

meme code
meme code@memecode
10 lip 05:43

Czym jest dystrybucja?

meme code
meme code@memecode
24 lip 11:02

Co to jest apt-get w Ubuntu?

meme code
meme code@memecode
24 lip 11:25

Jak zainstalować Steam w Ubuntu? Instalacja Steam przez terminal.

meme code
meme code@memecode