Projekt na zajęcia, pomoc z animacją

0

Witam

Mam pewien problem. W projekcie który nam zadano mamy, również zaanimować jak działają algorytmy sortowania. Wymyśliłem sobie że wyrysuje tabelę w postaci nieuporządkowanej(składniki odpowiadają długości linii) i za pomocą timera po każdym przeniesieniu składnika wyświetlić zmiany.
i tu np.

 
        public static void SelectSort(int[] T, int n)
        {
            int k, j;
            int Pomocnicza=0;
            for (int i = 0; i < n - 1; i++)
            {
                k = i;
                for (j = i + 1; j < n; j++)
                {
                    if (T[k] > T[j])
                        k = j;
                }
                Pomocnicza = T[i];
                T[i] = T[k];
                T[k] = Pomocnicza;
            }
        }

Problem polega na tym że nie za bardzo wiem jak to zaimplementować. Wykonanie metody jest równoznaczne z posortowaniem całej tablicy. A mi chodzi o to ,aby każdą zmianę zapisać. Wpadłem na pomysł ,żeby zapisać to w tablicy dwuwymiarowej, każdą zmianę w kolejnym wierszu. Jeśli ktoś mógłby mi z tym pomóc ,to byłbym wdzięczny.

0

A wypisanie tablicy w pierwszym for nie wystarczy?

0

Ogółem jest to aplikacja formularzowa. Chciałem na panelu zrobić coś takiego. http://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif . Jeśli zrobiłbym chyba w pętli to zbyt szybko by się wykonała i nie byłoby tego widać na tym, chyba żeby jakoś opóźnić for. Programowanie dla mnie jest jak czarna magia ,ale przedmiot zaliczyć muszę. :D

Potrzebuje jeszcze metody algorytmu sortowania introspektywnego. Znalazłem kod na wiki ale jest w c++ i nie za bardzo ogarniam jak działają np te pętle for w Partition

 template <class Item>
void Hybrid_Introspective_Sort (Item *Array, long N)
{
  IntroSort(Array,N,(int)floor(2*log(N)/M_LN2));
  Insertion_Sort(Array,N);
}
 
template <class Item>
void IntroSort (Item *Array, long N, int M)
{
  long i;
  if (M<=0)
  {
    Heap_Sort(Array,N);
    return;
  }
  i=Partition(Array,0,N);
  if (i>9)
    IntroSort(Array,i,M-1);
  if (N-1-i>9)
    IntroSort(Array+i+1,N-1-i,M-1);
}
Kod procedury Partition jest taki sam, jak w przypadku sortowania szybkiego:

template <class Item>
long Partition (Item *Array, long L, long R)
{
  long i, j;
  if (R>=3)
    MedianOfThree(Array,L,R);
  for (i=L, j=R-2; ; )
  {
    for ( ; Array[i]<Array[R-1]; ++i);
    for ( ; j>=L && Array[j]>Array[R-1]; --j);
    if (i<j)
      Exchange(Array,i++,j--);
    else break;
  }
  Exchange(Array,i,R-1);
  return i;
}
 
template <class Item>
void MedianOfThree (Item *Array, long &L, long &R)
{
  if (Array[++L-1]>Array[--R])
    Exchange(Array,L-1,R);
  if (Array[L-1]>Array[R/2])
    Exchange(Array,L-1,R/2);
  if (Array[R/2]>Array[R])
    Exchange(Array,R/2,R);
  Exchange(Array,R/2,R-1);
}
 
template <class Item>
void Exchange (Item *Array, long i, long j)
{
  Item temp;
  temp=Array[i];
  Array[i]=Array[j];
  Array[j]=temp;
}
Kod procedury Heap Sort to kod sortowania przez kopcowanie:

template <class Item>
void Heap_Sort (Item *Array, long N)
{
  long i;
  for (i=N/2; i>0; --i)
    Heapify(Array-1,i,N);
  for (i=N-1; i>0; --i)
  {
    Exchange(Array,0,i);
    Heapify(Array-1,1,i);
  }
}
 
template <class Item>
void Heapify (Item *Array, long i, long N)
{
  long j;
  while (i<=N/2)
  {
    j=2*i;
    if (j+1<=N && Array[j+1]>Array[j])
      j=j+1;
    if (Array[i]<Array[j])
      Exchange(Array,i,j);
    else break;
    i=j;
  }
}
Procedura Insertion Sort to procedura sortowania przez wstawianie:

template <class Item>
void Insertion_Sort (Item *Array, long N)
{
  long i, j;
  Item temp;
  for (i=1; i<N; ++i)
  {
    temp=Array[i];
    for (j=i; j>0 && temp<Array[j-1]; --j)
      Array[j]=Array[j-1];
    Array[j]=temp;
  }
}

Jakby ktoś mógł mi objaśnić jak to przepisać na c# byłbym wdzięczny.

1

Jeśli zrobiłbym chyba w pętli to zbyt szybko by się wykonała i nie byłoby tego widać na tym, chyba żeby jakoś opóźnić for.

Sortuj w nowym wątku i użyj Thread.Sleep żeby spowolnić sortowanie.

0

Ooo o to chodziło wielkie dzięki dam1an!. Nie wpadłem na to, animacja hula. Pozostała kwestia ostatniego sortowania jakie jest mi potrzebna czyli introspektywne.

1 użytkowników online, w tym zalogowanych: 0, gości: 1