Alfabetyczne sortowanie bąbelkowe

mike87

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

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.

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.

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

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.

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

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ć.