Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [c++] Sortowanie Przez Zliczanie - Problem
Forum PHP.pl > Inne > Hydepark
djbarca
  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
kwiateusz
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
djbarca
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.