Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [c++] Sortowanie Przez Zliczanie - Problem
djbarca
post 2.06.2011, 14:45:13
Post #1





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <time.h>
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. const int N = 80;
  10. const int KMIN = 0;
  11. const int KMAX = 26;
  12.  
  13. struct
  14. {
  15. unsigned klucz;
  16. char wyraz[3];
  17. } d[N],b[N];
  18.  
  19. unsigned L[KMAX - KMIN + 1];
  20. int i,j,v;
  21.  
  22. cout << " Sortowanie Przez Zliczanie\n"
  23. "------------------------------\n"
  24. " (C)2005 mgr Jerzy Walaszek\n\n"
  25. "Przed sortowaniem:\n\n";
  26.  
  27. // Generujemy losowe elementy do sortowania oraz ich klucze
  28.  
  29. srand((unsigned)time(NULL));
  30.  
  31. for(i = 0; i < N; i++)
  32. {
  33. for(j = 0; j < 3; j++) d[i].wyraz[j] = 65 + rand() % 3;
  34. d[i].klucz = 0;
  35. v = 1;
  36. for(j = 2; j >= 0; j--)
  37. {
  38. d[i].klucz += v * (d[i].wyraz[j] - 65);
  39. v *= 3;
  40. }
  41. }
  42.  
  43. // Wyświetlamy wygenerowane elementy
  44.  
  45. for(i = 0; i < N; i++)
  46. cout << ' ' << d[i].wyraz[0] << d[i].wyraz[1] << d[i].wyraz[2];
  47. cout << endl;
  48.  
  49. // Zerujemy liczniki
  50.  
  51. for(i = KMIN; i <= KMAX; i++) L[i - KMIN] = 0;
  52.  
  53. // Zliczamy wystąpienia kluczy
  54.  
  55. for(i = 0; i < N; i++) L[d[i].klucz - KMIN]++;
  56.  
  57. // Obliczamy pozycje końcowe elementów
  58.  
  59. for(i = KMIN + 1; i <= KMAX; i++) L[i - KMIN] += L[i - KMIN - 1];
  60.  
  61. // Przepisujemy elementy z d[ ] do b[ ]
  62.  
  63. for(i = N - 1; i >= 0; i--) b[(L[d[i].klucz - KMIN]--) - 1] = d[i];
  64.  
  65. // Wyświetlamy wyniki w b[ ]
  66.  
  67. cout << "Po sortowaniu:\n\n";
  68. for(i = 0; i < N; i++)
  69. cout << ' ' << b[i].wyraz[0] << b[i].wyraz[1] << b[i].wyraz[2];
  70. cout << endl;
  71. return 0;
  72. }



witam. mam pewien problem (po częsci z wykładowcą) .. mam takie oto sortowanie ze strony http://edu.i-lo.tarnow.pl .i moj problem jest jest taki troche nietypowy, mianowicie musze odkryc jaka idea kryje sie pod ta linijka:

for(i = KMIN + 1; i <= KMAX; i++) L[i - KMIN] += L[i - KMIN - 1];

.. nie chodzi mi o to do czego sluzy ta linijka , bo to wiem.. prosilbym o pomoc. Pozdrawiam smile.gif

Ten post edytował djbarca 2.06.2011, 14:46:08
Go to the top of the page
+Quote Post
kwiateusz
post 2.06.2011, 22:25:55
Post #2


Admin Techniczny


Grupa: Administratorzy
Postów: 2 071
Pomógł: 93
Dołączył: 5.07.2005
Skąd: Olsztyn




jeśli poznasz zasade działania algorytmu to stanie sie to jasne, tu masz obrazkowo http://www.cse.iitk.ac.in/users/dsrkg/cs21...untingSort.html jak dobrze patrze to jest moment sumowania ile razy wystąpił dany element
Go to the top of the page
+Quote Post
djbarca
post 4.06.2011, 08:38:48
Post #3





Grupa: Zarejestrowani
Postów: 231
Pomógł: 1
Dołączył: 22.04.2007
Skąd: Rypin

Ostrzeżenie: (0%)
-----


No wlasnie w tym problem. Mamy takiego wykladowce, ktory pyta nie o to co robi dana linijka, tylko jaki jest sens tego ze ona tam jest. Opdowiedz jaka ty nasunales juz mowilem nie raz biggrin.gif przeczytam zawartosc spod linku, moze tam znajde odpowiedz smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.06.2025 - 17:05