algorytm.org

Implementacja w C#



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Sortowanie bąbelkowe (bubblesort) - Implementacja w C#
Ocena użytkownikóww: *****  / 23
SłabyŚwietny
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();
        }
    }
}
Komentarze
photo
+1 # Gilu 2016-01-23 21:48
czy ktoś mógłby wytłumaczyć o co tutaj chodzi ?

int tmp = tablica;
tablica = tablica[i + 1];
tablica[i + 1] = tmp;
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Dak 2018-02-08 13:30
Ma moje oko dochodzi tutaj do zamiany elementu na pozycji "i" ("tablica") z elementem na pozycji "i + 1" ("tablica[i + 1]") z wykorzystaniem zmiennej pomocniczej "tmp".
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Slv 2018-08-27 10:33
Po prostu elementy zamieniane są miejscami, przykład liczbowy
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.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # wolvgvng 2018-11-21 19:58
Cytuję Gilu:
czy ktoś mógłby wytłumaczyć o co tutaj chodzi ?

int tmp = tablica;
tablica = tablica[i + 1];
tablica[i + 1] = tmp;



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.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Wojtek.Mormo 2016-04-24 09:15
Zamieniasz miejscami liczby:
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.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+1 # Kamil33 2017-06-12 16:40
Hej,

"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;
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+2 # JJ 2017-10-12 07:59
czasem sortowanie nie powinno zaczynać się od końca?
for (int i = 0; i < n - 1; i++)
powinno być
for (int i = n; i>0; i--)
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz