Programowanie w języku Delphi » Gotowce

Alfabetyczne sortowanie bąbelkowe

  • 2006-10-29 14:33
  • 6 komentarzy
  • 3313 odsłon
  • Oceń ten tekst jako pierwszy

Sortowanie danych typu String w tablicy


Procedura sortuje alfabetycznie dane w zadanej tablicy.

W sekcji var należy dodać następujące zmienne:
var i,j,licznik,licznik2:integer;
temp:string;

Natomiast w miejscu gdzie ma się odbyć sortowanie wklejamy kod:
begin;
licznik:=1;
licznik2:=1;
//zliczanie ilości elementów tablicy
repeat
if nazwa_tablicy[licznik]<>'' then
  begin;
  inc(licznik);
  inc(licznik2);
  end;
until nazwa_tablicy[licznik]='';
licznik2:=licznik2-2;
//sortowanie metodą sortowania bąbelkowego
for j:=1 to licznik2 do
  begin;
    for i:=1 to licznik2 do
      begin;
        if AnsiCompareText(nazwa_tablicy[i],nazwa_tablicy[i+1])>0 then
          begin
            temp:=nazwa_tablicy[i];
            nazwa_tablicy[i]:=nazwa_tablicy[i+1];
            nazwa_tablicy[i+1]:=temp;
          end;
      end;
  end;
end;

Oczywiście zamiast nazwa_tablicy wpisujemy wszędzie nazwę tablicy w której chcemy posortować elementy. Kod jest napisany z przeznaczeniem do tablic które zaczynają się od elementu 1, na przykład tablica[1..100]. W celu zliczania tablic, które zaczynają się od zera należy zmienić początkowe wartości zmiennych licznik i licznik2 na 0 oraz wartości zmiennych j oraz i w pętlach także na 0.

Sortowanie danych w komponencie TStringList


Procedura sortuje alfabetycznie dane w komponencie TStringList.

W sekcji var należy dodać następujące zmienne:
var i,j,licznik2:integer;
temp:string;

Natomiast w miejscu gdzie ma się odbyć sortowanie wklejamy kod:
begin;
licznik2:=stringlista.Count-2;
//sortowanie metodą sortowania bąbelkowego
for j:=0 to licznik2 do
  begin;
    for i:=0 to licznik2 do
      begin;
        if AnsiCompareText(stringlista[i],stringlista[i+1])>0 then
          begin
            temp:=stringlista[i];
            stringlista[i]:=stringlista[i+1];
            stringlista[i+1]:=temp;
          end;
      end;
  end;
end;

Zamiast stringlista wpisujemy wszędzie nazwę komponentu TStringList w którym chcemy posortować elementy.

Sortowanie kolejno liczb w tablicy


Procedura sortuje alfabetycznie liczby w zadanej tablicy

Jeśli liczby są liczbami całkowitymi typu integer to w sekcji var należy dodać następujące zmienne:
var i,j,licznik2,temp:integer;

Jeśli zmienne są typu rzeczywistego (real) to musimy dodać zmienne:
var i,j,licznik2:integer;
temp:real;

Natomiast w miejscu gdzie ma się odbyć sortowanie wklejamy kod:
begin;
// podaj liczbę pól tablicy
licznik2:=11; // ilość dla tablicy [0..10]
//sortowanie metodą sortowania bąbelkowego
for j:=0 to licznik2-2 do
  begin;
    for i:=0 to licznik2-2 do
      begin;
        if tablica[i]>tablica[i+1] then
          begin
            temp:=tablica[i];
            tablica[i]:=tablica[i+1];
            tablica[i+1]:=temp;
          end;
      end;
  end;
end;

Zamiast tablica wpisujemy wszędzie nazwę tablicy w której chcemy posortować elementy. Ponadto na samym początku do zmiennej licznik2 przyporządkowujemy liczbę elementów (lub pól) w naszej tablicy.
Uwaga! Pamiętaj o tym, że ilość elementów w tablicy [0..10] wynosi 11!

Uwaga dotycząca wszystkich rodzajów sortowania:


Jeśli chcemy posortować elementy od największego do najmniejszego to w linii w której porównujemy
 if tablica[i]>tablica[i+1] then

lub
 if AnsiCompareText(nazwa_tablicy[i],nazwa_tablicy[i+1])>0 then

trzeba zmienić znak z > na <:
 if tablica[i]<tablica[i+1] then

 if AnsiCompareText(nazwa_tablicy[i],nazwa_tablicy[i+1])<0 then

6 komentarzy

Legalnl 2009-08-17 19:44

to jest temat o sortowaniu bąbelkowym, i jak ktoś bedzie chciał sortować calą kilkutysięczną baze danych to uzyje innej metody. Co do przykłądu jest błąd, nie sortuje ostatniej linijki tekstu.

mike87 2006-10-31 20:27

Może dlatego że to ma być przykład jak działa sortowanie bąbelkowe i jak je zastosować do prostych programów? Przecież to wiadomo, że bąbelki nie nadadzą się do sortowania tablicy z kilkoma tysiącami danych bo będzie to zbyt wolne. Fakt - na początku artykułu powinna się znaleźć informacja, że jest to wolne sortowania i do zastosowania w przypadkach gdzie elementów nie jest wiele. Ale spójrzmy na to z drugiej strony - czy programiści piszący rozbudowane programy z wielkimi tablicami potrzebują gotowców do takich prostych czynności jak sortowanie? Mnie się wydaje, że nie.

Xitami 2006-10-31 20:19

I są to bąbelki w najgorszym wydaniu, przepraszam, ale takie coś powinno być skasowane!!!
Pytanie konkursowe – jak gorzej napisać takie sortowanie?

mike87 2006-10-31 15:09

Owszem istnieją, ale jak sama nazwa artykułu wskazuje ten ma prezentować tylko sortowanie bąbelkowe, liczę że ktoś napisze podobny tekst na temat algorytmów szybszego sortowania.

ŁF 2006-10-31 13:12

przydałaby sie informacja, że istnieją dużo wydajniejsze algorytmy sortowania (quicksort, mergesort itp)

Oleksy_Adam 2006-10-28 23:25

Sądząc po AnsiCompareText tyczy się to delphi. Wspomnij cos o TStingList. Bardzo często padają pytania odnośnie sortowania tablic. Dodaj sortowanie typów rekordowych, liczb itp. Wreszcie będę mógł podawać linki do arta, a nie ciągle to samo w newbie klepać.