Skocz do zawartości
Krystian17

Sortowanie 4 Liczb

Rekomendowane odpowiedzi

Witam

 

mam interesujace zagadnienie w jezyku pascal

 

interesuje mnie jak wypisac w kolejnosci rosnacej 4 liczby (np a, b, c i d) nie uzywajac wiecej niz 5 slow "if"

 

myslalem nad tym zeby to wrzycic do tablicy jakos i posortowac to babelkowym systemem ale nie za bardzo czaje jak to zrobic - mysle ze pomysl mam dobry, ale gorzej z wykonaniem

 

tak wiec prosze was o pomoc

 

mile widziana jakas procedurka albe chociarz opis jak to zrobic

 

POZDRO

Edytowane przez Krystian17

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Witam

 

mam interesujace zagadnienie w jezyku pascal

 

interesuje mnie jak wypisac w kolejnosci roznacej 4 liczby (np a, b, c i d) nie uzywajac wiecej niz 5 slow "if"

 

myslalem nad tym zeby to wrzycic do tablicy jakos i posortowac to babelkowym systemem ale nie za bardzo czaje jak to zrobic - mysle ze pomysl mam dobry, ale gorzej z wykonaniem

 

tak wiec prosze was o pomoc

 

mile widziana jakas procedurka albe chociarz opis jak to zrobic

 

POZDRO

Algorytm zwie się sortowanie przez zliczanie w C++ to wygląda tak

//deklarujemy tablice na 32000 elementow jesli liczby sa dodatnie#define max 33000int tab[max]={0};int liczby[4];int i,j;  for ( i=0;i<4;i++) {	j =liczby[i];   tab[j]++; }j=-1; i=4;while( i){	while(tab[++j]<1 && j <32000)	{			}  cout<<tab[j];  i-=tab[j];}
//prosze i bez ifów

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Sortowanie przez zliczanie to kiepski pomysł. Po pierwsze, można nim sortować tylko liczby całkowite, po drugie - wymaga ono alokacji licznika dla każdej możliwej liczby. Do sortowania liczb od 0 do 31999 wymaga co najmniej 32 kB - śmieszne, jesli mamy posortować tylko 4 liczby :)

Najbardziej optymalne byłoby utworzenie drzewa decyzyjnego, które zapewni najmniejszą możliwą liczbę porównań. Jesli to jednak ma być bez wielu if'ów, to doskonale nada się dowolny algorytm sortowania z wykorzystaniem porównań, np. przez wstawianie (INSERTION-SORT) lub wybór (SELECTION-SORT).

 

Przykład - sortowanie przez wstawianie:

void InsertionSort(int *t, int count){  register int j;  for (j = 1; j < count; j++)  {	register int i;	int key = t[j];	for (i = j - 1; i >= 0 && t[i] > key; i--)	  t[i + 1] = t[i];	t[i + 1] = key;  }}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie zwróciłem uwagi, że chodzi o pascala....

type  TIntArray = array[0..0] of Integer;  PIntArray = ^TIntArray;procedure SortowaniePrzezWstawianie(tab : PIntArray; rozmiar : Integer);var  i, j, x : Integer;begin  for j := 1 to rozmiar - 1 do  begin	x := tab^[j]; { x - pierwszy element nieposortowanej częci tablicy }	i := j - 1; { i - indeks ostatniego elementu posortowanej częci }	while (i >= 0) and (tab^[i] > x) do	begin	  { robienie miejsca na x }	  tab^[i + 1] := tab^[i];	  i := i - 1;	end;	{ wstawienie x w odpowiednie, wygospodarowane miejsce }	tab^[i + 1] := x;  end;end;

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zrobilem cos takiego (znaczy zmodyfikowalem ;) )

 

program rosnace;uses crt;var  liczby : array[1..4] of byte;  i, pom : byte;  ileliczb : byte;  zamiana : boolean; procedure WTablice;var  i:byte;begin for i := 1 to 4 do  write(Liczby[i],' ');  writeln;end;begin   clrscr;   randomize;   for i:=1 to 4 do	liczby[i] := random(100)+1;writeln;		ileliczb:=4;  repeat	 zamiana := false;	 ileliczb:=ileliczb-1;	 for i:=1 to ileliczb do	  if (liczby[i] > liczby[i+1]) then	begin	   pom:=liczby[i]; liczby[i]:=liczby[i+1]; liczby[i+1]:=pom;	   zamiana :=true;	end;  until not zamiana;  write('Tablica posortowana: ');  WTablice;  repeat until keypressed;end.

Nie jest to moze profesjonal ale zawsze to cos ;)

 

PS. sorry za formatowanie

Edytowane przez Krystian17

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...