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 szybkie (quicksort) - Implementacja w C#
Ocena użytkownikóww: *****  / 11
SłabyŚwietny
Nadesłany przez Bartosz Sypytkowski, 14 kwietnia 2012 22:43
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.

quicksort.cs:
//Sortowanie szybkie (quicksort)
//Bartosz Sypytkowski
//www.algorytm.org

using System;

namespace QuickSort
{
    class Program
    {
        public static void QuickSort(int[] array, int left, int right)
        {
            var i = left;
            var j = right;
            var pivot = array[(left + right) / 2];
            while (i < j)
            {
                while (array[i] < pivot) i++;
                while (array[j] > pivot) j--;
                if (i <= j)
                {
                    // swap
                    var tmp = array[i];
                    array[i++] = array[j];  // ++ and -- inside array braces for shorter code
                    array[j--] = tmp;
                }
            }
            if (left < j) QuickSort(array, left, j);
            if (i < right) QuickSort(array, i, right);
        }

        static void Main(string[] args)
        {
            var rand = new Random();
            var array = new int[100];
            for (int i = 0; i < array.Length; i++)
            {
                array[i] = rand.Next(1000);
            }
            Console.WriteLine("Before: ");
            Console.WriteLine(string.Join(" ", array));

            QuickSort(array, 0, array.Length - 1);

            Console.WriteLine("Affter: ");
            Console.WriteLine(string.Join(" ", array));

            Console.ReadLine();
        }
    }
}
Komentarze
photo
-4 # adrianwoo 2012-12-19 09:18
// swap
var tmp = array;
array[i++] = array[j];
// ++ and -- inside array braces for shorter code
array[j--] = tmp;

Czy ten kod jest poprawny?? Wydaje mi się że w ten sposób pozbywamy się z tablicy liczby array[i++]. Czy nie powinno być?
Początkujacy.

var tmp = array;
array = array[j];
array[j] = tmp;
i++;
j--;
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-2 # 0nix 2013-01-09 23:38
Tak się nie stanie, ponieważ "++i" oraz "i++" to nie jest to samo. Zapis "i++" nakazuje dodać jeden PO wykonaniu polceniaoznacza to że w przypadku:

a=1
b=2
a=b++

otzrzymamy a=2 b=3 bo 'b' najpierw przekazuje swoje dane,a potem się podnosi.
to samo:

a=1
b=2
a=b
b++

To co napisałeś zdarzyło by się przy pomyłce:"++i" zamiast "i+".

a=1
b=2
a=++b

Koniec:a=3 b=3 (b najpierw się podnosi a potem kopiuje bo b)

Pamiętaj że "++i" jest minimalnie szybsza niż "i++". Stosuj "++i" gdy zapis nie ma znaczenia.

Programowanie Próbowanie-prawie to samo nie bój się eksperymentować .
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz