Sortowanie przez kopcowanie i problem z powtarzającymi się liczbami

0

Cześć, napisałem program w pascalu sortujący liczby przez kopcowanie, ale jest problem z jego dokładnym działaniem (ma problem z liczbami, które się powtarzają) co może być nie tak?

Kod:

program sort_przez_kopiec;

var
  d: array[1..1000] of integer;
  i,j,k,m,x, N : integer;

begin

  readln(N);
   //d[1] := 9;
   for i := 1 to N do read(d[i]);

  for i := N downto 1 do
  begin
    x := d[1];
    d[1] := d[i];
    d[i] := x;
    j := 1;
    k := 2;

    while k < i do
    begin

      if (k + 1 < i) and (d[k + 1] > d[k]) then
        m := k + 1
      else
        m := k;

      if d[m] <= d[j] then break;
      x := d[j];
      d[j] := d[m];
      d[m] := x;
      j := m;
      k := j + j;
    end;
  end;

  for i := 1 to N do write(d[i]:2);

end.
0

co może być nie tak?

To że nie opisałeś dokładnie problemu.

0

Nie sortuje dokładnie danych. Jak wprowadzę np 10 liczb i 3 się będą powtarzać, to źle posortuje.

0

to źle posortuje.

Czyli gramy w 100 pytań? Spoko!

A możesz powiedzieć na czym te anomalie polegają? (odpisz na max. 10 słów bo inaczej nie będzie zabawy).

0

Jakbyś skopiował sobie kod do pascala i wprowadził liczby wg schematu, który opisałem, to byś nie trollował.

Jak wprowadzę liczby: 3 5 3 2 1 2 4 5 6 9 8

to jest wynik 1 2 3 5 5 6 9 8 3.

2

Jakbyś skopiował sobie kod do pascala i wprowadził liczby wg schematu, który opisałem, to byś nie trollował.

Czyli według ciebie to ja mam się trudzić żeby to wkleić w pascala, skompilować i obserwować wyniki? Mi się wydawało że to nie ja mam problem.

A co do twojego algorytmu, to porównując z moją książką od algorytmów wychodzi że nie masz początkowej fazy o nazwie 'BudujKopiec' która również kopcuje i wykonuje się od (n/2-1) do 0, dokładniej znajdziesz w google.
poza tym, również algorytm nie pasuje mi tutaj:
if d[m] <= d[j] then break; - moja książka nie mówi nic o wyjściu z pętli, poza tym jest jeszcze jedno porównanie i wykonanie rekurencyjnie kopcowania.

Może pokaż skąd masz algorytm, to wtedy znajdziemy błąd, bo moja książka mówi o stosunkowo innym algorytmie o dziwo.

0

Skoro ta metoda/algorytm źle działa to weź stwórz inną jest pełno gotowców przejrzyj je, przeanalizuj i zobacz co źle zrobiłeś... albo skorzystaj z tej co jest w TStringList

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