Subversion Repositories Kolibri OS

Rev

Rev 2266 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2496 leency 1
//Быстрая сортировка. Leency 2008.
975 leency 2
 
3
void Sort_by_Size(int a, b)   // для первого вызова: a = 0, b = <элементов в массиве> - 1
4
{
2266 leency 5
	int i = a;
975 leency 6
	IF (a >= b) return;
7
	FOR (j = a; j <= b; j++)
984 leency 8
		IF (ESDWORD[file_mas[j]*304 + buf+64] <= ESDWORD[file_mas[b]*304 + buf+64])
975 leency 9
		{ file_mas[i] >< file_mas[j];   i++;}
10
	Sort_by_Size (a, i-2);
11
	Sort_by_Size (i, b);
12
}
13
 
14
 
15
void Sort_by_Name(int a, b)   // для первого вызова: a = 0, b = <элементов в массиве> - 1
16
{
17
	int i = a;
18
	IF (a >= b) return;
19
	FOR (j = a; j <= b; j++)
20
		IF (strcmp(file_mas[j]*304 + buf+72, file_mas[b]*304 + buf+72)<=0) { file_mas[i] >< file_mas[j];   i++;}
21
	Sort_by_Name(a, i-2);
22
	Sort_by_Name(i, b);
23
}
24
 
984 leency 25
 
26
void Sort_by_Type(int a, b)   // для первого вызова: a = 0, b = <элементов в массиве> - 1
27
{
2266 leency 28
	int i=a;
29
	int n;
30
	dword offset=buf+72;
31
	byte filename1[256], filename2[256];
32
 
984 leency 33
	IF (a >= b) return;
975 leency 34
	for (j = a; j <= b; j++)
35
	{
36
	    //
976 leency 37
		copystr(file_mas[j]*304 + offset, #filename1);
38
		copystr(file_mas[b]*304 + offset, #filename2);
39
		n=strlen(#filename1)-1;
40
		WHILE (filename1[n]<>'.') && (n>0) n--;
41
		IF (n) copystr(#filename1+n+1, #filename1);
42
		n=strlen(#filename2)-1;
43
		WHILE (filename2[n]<>'.') && (n>0) n--;
44
		IF (n) copystr(#filename2+n+1, #filename2);
45
		//
46
		n=strcmp(#filename1, #filename2);
47
		IF (n<0) { file_mas[i] >< file_mas[j];   i++;}
48
		IF (n==0) && (strcmp(file_mas[j]*304 + offset, file_mas[b]*304 + offset)<=0) { file_mas[i] >< file_mas[j];   i++;}
49
	}
984 leency 50
	Sort_by_Type(a, i-2);
51
	Sort_by_Type(i, b);
975 leency 52
}
53