Ocena użytkownikóww: ***** / 24
Nadesłany przez Sonquer, 01 kwietnia 2013 14:16
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
sortowanie_babelkowe.cs:
/*
* Sortowanie Bąbelkowe
* www.algorytm.org
* Opracował: Patryk Pasek
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
//Sortowanie babelkowe
static void sort(int[] tablica)
{
int n = tablica.Length;
do
{
for (int i = 0; i < n - 1; i++)
{
if (tablica[i] > tablica[i + 1])
{
int tmp = tablica[i];
tablica[i] = tablica[i + 1];
tablica[i + 1] = tmp;
}
}
n--;
}
while (n > 1);
}
static void Main(string[] args)
{
//tablica do posortowania
int[] arr = { 1000, 33, 123, 10, 1, 12442, 99, 111 };
//wypisz zawartosc przed sortowaniem
Console.WriteLine("\n Przed sortowaniem : \n");
for (int z = 0; z < arr.Length; z++)
{
Console.Write(arr[z] + ", ");
}
//sortuj babelkowo
sort(arr);
//wypisz zawartosc po sortowaniu
Console.WriteLine("\n\n\n Po sortowaniu : \n");
for (int z = 0; z < arr.Length; z++)
{
Console.Write(arr[z] + ", ");
}
Console.ReadKey();
}
}
}
int tmp = tablica;
tablica = tablica[i + 1];
tablica[i + 1] = tmp;
tablica=10;
tablica[i+i]=5;
int tmp = 10;
tablica = 5;
tablica[i+1] = 10
Jest to najłatwiejszy sposób na zamianę dwóch liczb. Należy do niego wykorzystać jednak dodatkową zmienną, żeby nie nadpisać sobie wartości.
2 elementy tablicy zamieniają się miejscami. Z powodu braku opcji bezpośredniej ich zamiany w jednej linijce (w matematyce na przykład możliwe to jest za pomocą symbolu ) stworzona musi zostać dodatkowo zmienna tymczasowa (tmp), która umożliwi nam zamianę tychże elementów.
zmienna tmp przyjmuje wartość elementu i tablicy;
element i staje się elementem i+1;
element i+1 przyjmuje wartość zmiennej tmp (czyli elementu i);
Mam nadzieję, że w miarę sensownie to wytłumaczyłem.
1. Zapisz aktualną wartość w zmiennej pomocniczej
2. Przypisz wartość następnego elementu do elementu aktualnego
3. Przypisz wartość zmiennej pomocniczej do następnego elementu.
"if (tablica > tablica[i + 1])
{
int tmp = tablica;
tablica = tablica[i + 1];
tablica[i + 1] = tmp;
}"
Jeśli, załóżmy, wcześniejsza wartość z ciągu do posortowania, niech to będzie teraz w tym przykładzie element "tablica[1]" ma wartość równą '5', a kolejny element, czyli "[i + 1]", czyli "tablica[2]" równa się '3'. To faktycznie tablica[i=1] będzie większe niż tablica[i=1+1=2] -> 5>3.
A więc, jak to wynika z działania sortowania bąbelkowego, ta '5' musi znaleźć się przed '3'. I tak, ta piątka idzie do zmiennej tmp. Komputer ją przechowuje w pamięci, tak jak Ty myślisz o tym, że tę piątkę zapiszesz zaraz przed trójką. Kod: int tmp = tablica;
Następnie w miejsce piątki idzie trójka: tablica = tablica[i + 1];
A na końcu piątka, którą mieliśmy w pamięci wpada miejsce, gdzie stała wcześniej trójka. tablica[i + 1] = tmp;
for (int i = 0; i < n - 1; i++)
powinno być
for (int i = n; i>0; i--)