Ocena użytkownikóww: ***** / 15
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();
}
}
}
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--;
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ć .