|
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 }