Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3402 Albom 1
 
2
///
3
/// Библиотека функций быстрой сортировки
4
///
5
///
6
/// Базовый код был взят с сайта algolist.manual.ru
7
///
8
/// Скомпоновал А. Богомаз aka Albom (albom85@yandex.ru)
9
///===========================================
10
11
 
12
 
13
/// Сортировка для переменных типа int (4 байта)
14
///===========================================
15
void qsi(int *a, int n)
16
{
17
18
 
19
int temp, p;
20
21
 
22
23
 
24
j = n;
25
26
 
27
	{
28
	while ( *(a+i) < p ) i++;
29
	while ( *(a+j) > p ) j--;
30
31
 
32
		{
33
		temp = *(a+i);
34
		*(a+i) = *(a+j);
35
		*(a+j) = temp;
36
		i++;
37
		j--;
38
		}
39
	} while ( i<=j );
40
41
 
42
	qsi(a, j);
43
if ( n > i )
44
	qsi(a+i, n-i);
45
46
 
47
48
 
49
/// Сортировка для переменных типа short int (2 байта)
50
///===========================================
51
52
 
53
{
54
55
 
56
short temp, p;
57
58
 
59
60
 
61
j = n;
62
63
 
64
	{
65
	while ( *(a+i) < p ) i++;
66
	while ( *(a+j) > p ) j--;
67
68
 
69
		{
70
		temp = *(a+i);
71
		*(a+i) = *(a+j);
72
		*(a+j) = temp;
73
		i++;
74
		j--;
75
		}
76
	} while ( i<=j );
77
78
 
79
	qss(a, j);
80
if ( n > i )
81
	qss(a+i, n-i);
82
83
 
84
85
 
86
/// Сортировка для переменных типа char (1 байт)
87
///===========================================
88
89
 
90
{
91
92
 
93
char temp, p;
94
95
 
96
97
 
98
j = n;
99
100
 
101
	{
102
	while ( *(a+i) < p ) i++;
103
	while ( *(a+j) > p ) j--;
104
105
 
106
		{
107
		temp = *(a+i);
108
		*(a+i) = *(a+j);
109
		*(a+j) = temp;
110
		i++;
111
		j--;
112
		}
113
	} while ( i<=j );
114
115
 
116
	qsc(a, j);
117
if ( n > i )
118
	qsc(a+i, n-i);
119
120
 
121
122
 
123
/// Сортировка для переменных типа unsigned int (4 байта)
124
///===========================================
125
void qsui(unsigned *a, int n)
126
{
127
128
 
129
unsigned temp, p;
130
131
 
132
133
 
134
j = n;
135
136
 
137
	{
138
	while ( *(a+i) < p ) i++;
139
	while ( *(a+j) > p ) j--;
140
141
 
142
		{
143
		temp = *(a+i);
144
		*(a+i) = *(a+j);
145
		*(a+j) = temp;
146
		i++;
147
		j--;
148
		}
149
	} while ( i<=j );
150
151
 
152
	qsui(a, j);
153
if ( n > i )
154
	qsui(a+i, n-i);
155
156
 
157
158
 
159
/// Сортировка для переменных типа unsigned short int (2 байта)
160
///===========================================
161
162
 
163
{
164
165
 
166
unsigned short temp, p;
167
168
 
169
170
 
171
j = n;
172
173
 
174
	{
175
	while ( *(a+i) < p ) i++;
176
	while ( *(a+j) > p ) j--;
177
178
 
179
		{
180
		temp = *(a+i);
181
		*(a+i) = *(a+j);
182
		*(a+j) = temp;
183
		i++;
184
		j--;
185
		}
186
	} while ( i<=j );
187
188
 
189
	qsus(a, j);
190
if ( n > i )
191
	qsus(a+i, n-i);
192
193
 
194
195
 
196
/// Сортировка для переменных типа unsigned char (1 байт)
197
///===========================================
198
199
 
200
{
201
202
 
203
unsigned char temp, p;
204
205
 
206
207
 
208
j = n;
209
210
 
211
	{
212
	while ( *(a+i) < p ) i++;
213
	while ( *(a+j) > p ) j--;
214
215
 
216
		{
217
		temp = *(a+i);
218
		*(a+i) = *(a+j);
219
		*(a+j) = temp;
220
		i++;
221
		j--;
222
		}
223
	} while ( i<=j );
224
225
 
226
	qsuc(a, j);
227
if ( n > i )
228
	qsuc(a+i, n-i);
229
230
 
231
232
 
233
 
234
/// Сортировка для переменных типа float (4 байта)
235
///===========================================
236
237
 
238
{
239
240
 
241
float temp, p;
242
243
 
244
245
 
246
j = n;
247
248
 
249
	{
250
	while ( *(a+i) < p ) i++;
251
	while ( *(a+j) > p ) j--;
252
253
 
254
		{
255
		temp = *(a+i);
256
		*(a+i) = *(a+j);
257
		*(a+j) = temp;
258
		i++;
259
		j--;
260
		}
261
	} while ( i<=j );
262
263
 
264
	qsf(a, j);
265
if ( n > i )
266
	qsf(a+i, n-i);
267
268
 
269
270
 
271
/// Сортировка для переменных типа double (8 байт)
272
///===========================================
273
274
 
275
{
276
277
 
278
double temp, p;
279
280
 
281
282
 
283
j = n;
284
285
 
286
	{
287
	while ( *(a+i) < p ) i++;
288
	while ( *(a+j) > p ) j--;
289
290
 
291
		{
292
		temp = *(a+i);
293
		*(a+i) = *(a+j);
294
		*(a+j) = temp;
295
		i++;
296
		j--;
297
		}
298
	} while ( i<=j );
299
300
 
301
	qsd(a, j);
302
if ( n > i )
303
	qsd(a+i, n-i);
304
305
 
306
307
 
308
309
 
310
 
311
312
 
313
{
314
void	*name;
315
void	*function;
316
} export_t;
317
318
 
319
char	szQss[] = "qss";
320
char	szQsc[] = "qsc";
321
char	szQsui[] = "qsui";
322
char	szQsus[] = "qsus";
323
char	szQsuc[] = "qsuc";
324
char	szQsf[] = "qsf";
325
char	szQsd[] = "qsd";
326
327
 
328
{
329
{ szQsi, (void*) qsi },
330
{ szQss, (void*) qss },
331
{ szQsc, (void*) qsc },
332
{ szQsui, (void*) qsui },
333
{ szQsus, (void*) qsus },
334
{ szQsuc, (void*) qsuc },
335
{ szQsf, (void*) qsf },
336
{ szQsd, (void*) qsd },
337
{ NULL, NULL },
338
};
339