Algorytm "Od szczegółu do ogółu"

0

Czy mógłby ktoś jakoś zrozumiale wytłumaczyć działanie tego algorytmu?

Dane:
k — liczba naturalna,
A[1...2k] — tablica liczb całkowitych.

W załączniku jest pełen algorytm.

3

Algorytm częściowo sortuje podaną tablicę. Powiedz czego nie rozumiesz, bo nie chce mi się pisać/mysleć, leniwa jestem.

1

igor kozub jest gruby

0

@szarotka Wiesz może jak będzie wyglądać Końcowa zawartość tablicy (jak na zdjęciu) dla zawartości [2, 3, 4, 1] ?? I jak ten alorytm działa dla tych wartości bo nie daje sobie rady.

0

function algo(A)
n=1
for i in 1:log(2,length(A))
n=2n
end
s=1
while s<n
j=1
while j<n
if A[j]>A[j+s]
A[j],A[j+s]=A[j+s],A[j]
end
j=j+2s
end
s=2s
end
A
end

takie coś ? dla drugiego wychodzi [1,3,2,4]

0
 function algo(A)
  n=1
  for i in 1:log(2,length(A))
    n=2n
  end
  s=1
  while s<n
    j=1
    while j<n
      if A[j]>A[j+s]
        A[j],A[j+s]=A[j+s],A[j]
      end
      j=j+2s
    end
    s=2s
  end
  A
end

sorka zły znacznik *

0

Mógłbyś trochę rozwinąć? Jakieś komentarze? Lepiej znam C++ i C#.

0

Czy może ktoś to przetłumaczyć na C++ ?

0

To jest kod w Julii i nie będę go tłumaczył bo nie rozumiem jego celu, komentować jak nie rozumiem też lipa.

0

To zadanie maturalne i potrzebujemy je rozwiązać.

1

Musisz sobie prześledzić krok po kroku.
dla [2, 3, 4, 1] wychodzi [1,3,2,4]

Co robisz:

  1. wyliczasz n=4.
  2. s=1<4
  3. j=1<4
  4. A[1]=2 > A[1+1=2]=3 - nie spełnia warunku, nie zamieniamy
  5. j=1+2*1=3
  6. A[3]=4 > A[3+1=2]=1 - zamieniamy - mamy [2, 3, 1, 4]
  7. s=2*1 =2
  8. cofamy sie do pętli s =2 < n=4
  9. j=1
  10. j=1 < n=4
  11. A[1]=2 < A[1+2] = 1 - zamieniamy - mamy [1, 3, 2, 4]
  12. j= 1+2*2 = 5
  13. j<n - nie jest pełniony warunek więc idziemy dalej
  14. s=2*s = 4
  15. s< n - nie jest spełniony warunek, kończymy pętlę

nie wiem czy zrozumiesz coś z tego, po prostu jak na matematyce sobie liczysz po kolei, żadna filozofia.

0

ahahah tu macie cały kod

 
function algo(A)
  n=1
  for i in 1:log(2,length(A))
    n=2n
  end
  s=1
  while s<n
    j=1
    while j<n
      if A[j]>A[j+s]
        A[j],A[j+s]=A[j+s],A[j]
      end
      j=j+2s
    end
    s=2s
  end
  A
end
y1 = algo([4,3,1,2])
y2 = algo([2,3,4,1])
y3 = algo([1,2,3,4,5,6,7,8])
y4 = algo([8,7,6,5,4,3,2,1])
y5 = algo([4,5,6,1,8,3,2,4])
print("$y1\n$y2\n$y3\n$y4\n$y5")

tutaj wyniki
[1,4,3,2]
[1,3,2,4]
[1,2,3,4,5,6,7,8]
[1,8,7,6,5,4,3,2]
[1,5,4,6,2,8,3,4]
czyli rzeczywiście zaczyna sortować ale celu nie znam.

0

Nie tłumacz celu programu tylko wytłumacz co po kolei działa kod - o to nam chodziło. Chociaż Szarotka już wytłumaczyła, świetnie, dzięki:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1