Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
975 leency 1
//Быстрая сортировка. Leency 2008. GPL license.
2
 
3
void Sort_by_Size(int a, b)   // для первого вызова: a = 0, b = <элементов в массиве> - 1
4
{
5
	int i= a;
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
{
28
	int i=a; dword offset=buf+72;  byte filename1[256], filename2[256]; int n;
29
	IF (a >= b) return;
975 leency 30
	for (j = a; j <= b; j++)
31
	{
32
	    //
976 leency 33
		copystr(file_mas[j]*304 + offset, #filename1);
34
		copystr(file_mas[b]*304 + offset, #filename2);
35
		n=strlen(#filename1)-1;
36
		WHILE (filename1[n]<>'.') && (n>0) n--;
37
		IF (n) copystr(#filename1+n+1, #filename1);
38
		n=strlen(#filename2)-1;
39
		WHILE (filename2[n]<>'.') && (n>0) n--;
40
		IF (n) copystr(#filename2+n+1, #filename2);
41
		//
42
		n=strcmp(#filename1, #filename2);
43
		IF (n<0) { file_mas[i] >< file_mas[j];   i++;}
44
		IF (n==0) && (strcmp(file_mas[j]*304 + offset, file_mas[b]*304 + offset)<=0) { file_mas[i] >< file_mas[j];   i++;}
45
	}
984 leency 46
	Sort_by_Type(a, i-2);
47
	Sort_by_Type(i, b);
975 leency 48
}
49