rendezesC++.cpp

  1  #include <iostream>
  2  #include <fstream>
  3  #include <ctime>
  4  #include <cstdlib>
  5  #include <string>
  6  #include <sstream>
  7  
  8  #define N 20000
  9  #define MAX 32768
 10  
 11  using namespace std;
 12  
 13  int T[N];
 14  string start,stop;
 15  int hason, cserel;
 16  
 17  string itt_az_ido(string sz)
 18  {
 19      time_t azIdo = time(NULL);
 20      struct tm *Ido = localtime(&azIdo);
 21  
 22      //int nap = Ido->tm_mday;
 23      //int honap = Ido->tm_mon + 1; // hónap 0-11 közötti számként vannak, így +1 kell
 24      //int ev = Ido->tm_year + 1900; // 1900 óta mennyi év telt el, ezt kapjuk alapból
 25      int ora=Ido->tm_hour;
 26      int perc=Ido->tm_min;
 27      int mp=Ido->tm_sec;
 28  
 29      string ora_s, perc_s, mp_s;
 30  
 31      ostringstream convert;
 32      convert << ora;
 33      ora_s=convert.str();
 34      ostringstream convert1;
 35      convert1 << perc;
 36      perc_s=convert1.str();
 37      ostringstream convert2;
 38      convert2 << mp;
 39      mp_s=convert2.str();
 40  
 41      string s=sz+ora_s+":"+perc_s+":"+mp_s;
 42      cout << s << endl;
 43      return s;
 44  }
 45  
 46  bool hasonlit(int egyik, int masik)
 47  {
 48      hason++;
 49      if(egyik>masik) return true;
 50      else return false;
 51  }
 52  
 53  void csere(int x, int y)
 54  {
 55      cserel++;
 56      swap(T[x],T[y]);
 57  }
 58  
 59  void generator()
 60  {
 61      cout << "Adatgenerálás...";
 62      ofstream fki;
 63      fki.open("input.txt");
 64  
 65      for(int i=0;i<N;i++)
 66      {
 67          T[i]=rand()%MAX+1;
 68          fki << T[i] << endl;
 69      }
 70      fki.close();
 71      cout << "vége!" << endl;
 72  }
 73  
 74  void frissit()
 75  {
 76      ifstream fbe;
 77      fbe.open("input.txt");
 78      for(int i=0;i<N;i++)
 79      {
 80          fbe >> T[i];
 81      }
 82      fbe.close();
 83  }
 84  
 85  void indit(string rendez)
 86  {
 87      cout << "----------------------------------------" << endl;
 88      cserel=0;
 89      hason=0;
 90      cout << rendez << " rendezés..." << endl;
 91      cout << "----------------------------------------" << endl;
 92      cout << "Adatok beolvasása...";
 93      frissit();
 94      cout << "Vége!" << endl;
 95  }
 96  
 97  void kiir(char* fn)
 98  {
 99  
100      cout << "Hasonlítások száma: " << hason << endl;
101      cout << "Mozgatások (cserék) száma: " << cserel << endl;
102      cout << "Rendezett adatok kiírása (" << fn << ")...";
103      ofstream fki;
104      fki.open(fn);
105      fki << start << endl;
106      fki << stop << endl;
107      fki << hason << endl;
108      fki << cserel << endl;
109      fki << "--------------------" << endl;
110      for(int i=0;i<N;i++)
111      {
112          fki << T[i] << endl;
113      }
114      fki.close();
115      cout << "...Vége!" << endl;
116  }
117  
118  void cseres()
119  {
120      indit("Egyszerû cserés");
121      start=itt_az_ido("Kezdés:");
122      for(int i=0;i<N-1;i++)
123      {
124          for(int j=i+1;j<N;j++)
125          {
126              if(hasonlit(T[i],T[j])) csere(i,j);
127          }
128      }
129      stop=itt_az_ido("Vége:");
130      kiir("cseres.txt");
131  }
132  
133  void minimumos()
134  {
135      indit("Minimumos");
136      start=itt_az_ido("Kezdés:");
137      int Min;
138      for(int i=0;i<N-1;i++)
139      {
140          Min=i;
141          for(int j=i+1;j<N;j++)
142          {
143              if(hasonlit(T[Min],T[j])) Min=j;
144          }
145          csere(Min,i);
146      }
147      stop=itt_az_ido("Vége:");
148      kiir("minim.txt");
149  }
150  
151  void buborekos()
152  {
153      indit("Buborékos");
154      start=itt_az_ido("Kezdés:");
155      for(int i=N;i>1;i--)
156      {
157          for(int j=0;j<i-1;j++)
158          {
159              if(hasonlit(T[j],T[j+1])) csere(j,j+1);
160          }
161      }
162      stop=itt_az_ido("Vége:");
163      kiir("buborekos.txt");
164  }
165  
166  void jav_buborekos()
167  {
168      indit("Javított buborékos");
169      start=itt_az_ido("Kezdés:");
170      int i=N-1, cs;
171      while(i>=1)
172      {
173          cs=0;
174          for(int j=0;j<i;j++)
175          {
176              if(hasonlit(T[j],T[j+1]))
177              {
178                  csere(j,j+1);
179                  cs=j;
180              }
181          }
182          i=cs;
183      }
184      stop=itt_az_ido("Vége:");
185      kiir("jav_buborekos.txt");
186  }
187  
188  void beilleszteses()
189  {
190      indit("Beillesztéses");
191      start=itt_az_ido("Kezdés:");
192      int j;
193      for(int i=1;i<N;i++)
194      {
195          j=i-1;
196          while(j>=0&&hasonlit(T[j],T[j+1]))
197          {
198              csere(j,j+1);
199              j=j-1;
200          }
201      }
202      stop=itt_az_ido("Vége:");
203      kiir("beilleszteses.txt");
204  }
205  
206  void jav_beilleszteses()
207  {
208      indit("Javított beillesztéses");
209      start=itt_az_ido("Kezdés:");
210      int j, S;
211      for(int i=1;i<N;i++)
212      {
213          j=i-1; S=T[i];
214          while(j>=0&&hasonlit(T[j],S))
215          {
216              T[j+1]=T[j]; cserel++;
217              j=j-1;
218          }
219          T[j+1]=S; cserel++;
220      }
221      stop=itt_az_ido("Vége:");
222      kiir("jav_beilleszteses.txt");
223  }
224  
225  /*
226  SHELL és QUICK SORT HAMAROSAN...
227  */
228  
229  int main()
230  {
231      setlocale(LC_ALL, "hun");
232      cout << "RENDEZÉSI ALGORITMUSOK" << endl;
233      cout << "----------------------" << endl;
234      cout << "Adatok száma: " << N << ", nagyságrend: " << MAX << endl;
235      srand(time(NULL));
236      generator();
237      cseres();
238      minimumos();
239      buborekos();
240      jav_buborekos();
241      beilleszteses();
242      jav_beilleszteses();
243      return 0;
244  }