//Быстрая сортировка. Leency 2008. GPL license. void Sort_by_Size(int a, b) // для первого вызова: a = 0, b = <элементов в массиве> - 1 { int i = a; IF (a >= b) return; FOR (j = a; j <= b; j++) IF (ESDWORD[file_mas[j]*304 + buf+64] <= ESDWORD[file_mas[b]*304 + buf+64]) { file_mas[i] >< file_mas[j]; i++;} Sort_by_Size (a, i-2); Sort_by_Size (i, b); } void Sort_by_Name(int a, b) // для первого вызова: a = 0, b = <элементов в массиве> - 1 { int i = a; IF (a >= b) return; FOR (j = a; j <= b; j++) IF (strcmp(file_mas[j]*304 + buf+72, file_mas[b]*304 + buf+72)<=0) { file_mas[i] >< file_mas[j]; i++;} Sort_by_Name(a, i-2); Sort_by_Name(i, b); } void Sort_by_Type(int a, b) // для первого вызова: a = 0, b = <элементов в массиве> - 1 { int i=a; int n; dword offset=buf+72; byte filename1[256], filename2[256]; IF (a >= b) return; for (j = a; j <= b; j++) { // copystr(file_mas[j]*304 + offset, #filename1); copystr(file_mas[b]*304 + offset, #filename2); n=strlen(#filename1)-1; WHILE (filename1[n]<>'.') && (n>0) n--; IF (n) copystr(#filename1+n+1, #filename1); n=strlen(#filename2)-1; WHILE (filename2[n]<>'.') && (n>0) n--; IF (n) copystr(#filename2+n+1, #filename2); // n=strcmp(#filename1, #filename2); IF (n<0) { file_mas[i] >< file_mas[j]; i++;} IF (n==0) && (strcmp(file_mas[j]*304 + offset, file_mas[b]*304 + offset)<=0) { file_mas[i] >< file_mas[j]; i++;} } Sort_by_Type(a, i-2); Sort_by_Type(i, b); }