Sortowanie bąbelkowe
Algorytm sortowania bąbelkowego polega na tym, że w każdym przejściu pętli z instrukcją porównawczą (większe lub mniejsze) porównywane są ze sobą dwa kolejne elementy i w wyniku testu porównania dochodzi do zamiany miejsc (indeksu pozycji w zbiorze). Element o największej wartości będzie się przemieszczać na przykład na ostatnią pozycję jeżeli sortujemy od najmniejszego do największego (czyli od a do z).
Przesuwanie się największego elementu w zbiorze przypomina ruch bąbelka w szklance napoju gazowanego- stąd nazwa algorytmu. Algorytm ten nie sprawdza się przy sortowaniu dużych zbiorów- jest dość wolny.
Schemat algorytmu sortowania bąbelkowego
Kod funkcji sortującej bąbelkowo zapisany w języku C#
Wskazówka:
void sortujBabelkowo(Int32[] t,int rozmiar)
{
for(int i=rozmiar-1;i>0;i--)
for(int j=0;j<i;j++)
if (t[j] > t[j +1])
{
int bufor = t[j];
t[j] = t[j + 1];
t[j + 1] = bufor;
}
}
Funkcja sortuje wcześniej utworzony zbiór w postaci tablicy jednowymiarowej o zadanym rozmiarze. Ciało funkcji, która tworzy taką tablicę bez zwracania uwagi na powtórzenia wygląda jak poniżej
Wskazówka:
void losujTablice(Int32[] t,int zakres)
{
Random r=new Random();
int i = 0;
while (i < t.Length) {
t[i] = r.Next(zakres) + 1;
i++;
}
}
Przykładowa aplikacja utworzona w Visual Studio wygląda jak poniżej
Pełny kod klasy Form utworzonej formatki aplikacji sortującej bąbelkowo
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace _10AlgSortBabel
{
public partial class Form1 : Form
{
Int32[] tab;
int rozmiar;
void losujTablice(Int32[] t,int zakres)
{
Random r=new Random();
int i = 0;
while (i < t.Length) {
t[i] = r.Next(zakres) + 1;
i++;
}
}
void sortujBabelkowo(Int32[] t,int rozmiar)
{
for(int i=rozmiar-1;i>0;i--)
for(int j=0;j<i;j++)
if (t[j] > t[j +1])
{
int bufor = t[j];
t[j] = t[j + 1];
t[j + 1] = bufor;
}
}
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
sortujBabelkowo(tab, rozmiar);
//wypisz posortowaną
//pokaz wylosowany zbior
textBox3.Clear();
for (int i = 0; i < tab.Length; i++)
textBox3.AppendText(tab[i].ToString() + Environment.NewLine);
}
private void button1_Click(object sender, EventArgs e)
{
//losowanie nowej tablicy
if (textBox1.Text.Length < 1) return;
//wyczysc stara tablice
if(tab!=null)Array.Clear(tab, 0, tab.Length);
//ustaw nowy rozmiar
rozmiar=int.Parse(textBox1.Text);
tab=new int[rozmiar];
//przy losowaniu ustaw zakres na 2 razy większy od rozmiaru
losujTablice(tab,2*rozmiar);
//pokaz wylosowany zbior
textBox2.Clear();
for (int i = 0; i < tab.Length; i++)
textBox2.AppendText(tab[i].ToString() + Environment.NewLine);
}
}
}