///=========================================== /// /// Áèáëèîòåêà ôóíêöèé áûñòðîé ñîðòèðîâêè /// /// /// Áàçîâûé êîä áûë âçÿò ñ ñàéòà algolist.manual.ru /// /// Ñêîìïîíîâàë À. Áîãîìàç aka Albom (albom85@yandex.ru) ///=========================================== ///=========================================== /// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà int (4 áàéòà) ///=========================================== void qsi(int *a, int n) { int i, j; int temp, p; p = *(a+(n>>1)); i = 0; j = n; do { while ( *(a+i) < p ) i++; while ( *(a+j) > p ) j--; if (i <= j) { temp = *(a+i); *(a+i) = *(a+j); *(a+j) = temp; i++; j--; } } while ( i<=j ); if ( j > 0 ) qsi(a, j); if ( n > i ) qsi(a+i, n-i); } ///=========================================== /// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà short int (2 áàéòà) ///=========================================== void qss(short *a, int n) { int i, j; short temp, p; p = *(a+(n>>1)); i = 0; j = n; do { while ( *(a+i) < p ) i++; while ( *(a+j) > p ) j--; if (i <= j) { temp = *(a+i); *(a+i) = *(a+j); *(a+j) = temp; i++; j--; } } while ( i<=j ); if ( j > 0 ) qss(a, j); if ( n > i ) qss(a+i, n-i); } ///=========================================== /// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà char (1 áàéò) ///=========================================== void qsc(char *a, int n) { int i, j; char temp, p; p = *(a+(n>>1)); i = 0; j = n; do { while ( *(a+i) < p ) i++; while ( *(a+j) > p ) j--; if (i <= j) { temp = *(a+i); *(a+i) = *(a+j); *(a+j) = temp; i++; j--; } } while ( i<=j ); if ( j > 0 ) qsc(a, j); if ( n > i ) qsc(a+i, n-i); } ///=========================================== /// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà unsigned int (4 áàéòà) ///=========================================== void qsui(unsigned *a, int n) { int i, j; unsigned temp, p; p = *(a+(n>>1)); i = 0; j = n; do { while ( *(a+i) < p ) i++; while ( *(a+j) > p ) j--; if (i <= j) { temp = *(a+i); *(a+i) = *(a+j); *(a+j) = temp; i++; j--; } } while ( i<=j ); if ( j > 0 ) qsui(a, j); if ( n > i ) qsui(a+i, n-i); } ///=========================================== /// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà unsigned short int (2 áàéòà) ///=========================================== void qsus(unsigned short *a, int n) { int i, j; unsigned short temp, p; p = *(a+(n>>1)); i = 0; j = n; do { while ( *(a+i) < p ) i++; while ( *(a+j) > p ) j--; if (i <= j) { temp = *(a+i); *(a+i) = *(a+j); *(a+j) = temp; i++; j--; } } while ( i<=j ); if ( j > 0 ) qsus(a, j); if ( n > i ) qsus(a+i, n-i); } ///=========================================== /// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà unsigned char (1 áàéò) ///=========================================== void qsuc(unsigned char *a, int n) { int i, j; unsigned char temp, p; p = *(a+(n>>1)); i = 0; j = n; do { while ( *(a+i) < p ) i++; while ( *(a+j) > p ) j--; if (i <= j) { temp = *(a+i); *(a+i) = *(a+j); *(a+j) = temp; i++; j--; } } while ( i<=j ); if ( j > 0 ) qsuc(a, j); if ( n > i ) qsuc(a+i, n-i); } ///=========================================== /// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà float (4 áàéòà) ///=========================================== void qsf(float *a, int n) { int i, j; float temp, p; p = *(a+(n>>1)); i = 0; j = n; do { while ( *(a+i) < p ) i++; while ( *(a+j) > p ) j--; if (i <= j) { temp = *(a+i); *(a+i) = *(a+j); *(a+j) = temp; i++; j--; } } while ( i<=j ); if ( j > 0 ) qsf(a, j); if ( n > i ) qsf(a+i, n-i); } ///=========================================== /// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà double (8 áàéò) ///=========================================== void qsd(double *a, int n) { int i, j; double temp, p; p = *(a+(n>>1)); i = 0; j = n; do { while ( *(a+i) < p ) i++; while ( *(a+j) > p ) j--; if (i <= j) { temp = *(a+i); *(a+i) = *(a+j); *(a+j) = temp; i++; j--; } } while ( i<=j ); if ( j > 0 ) qsd(a, j); if ( n > i ) qsd(a+i, n-i); } ///=========================================== #define NULL ((void*)0) typedef struct { void *name; void *function; } export_t; char szQsi[] = "qsi"; char szQss[] = "qss"; char szQsc[] = "qsc"; char szQsui[] = "qsui"; char szQsus[] = "qsus"; char szQsuc[] = "qsuc"; char szQsf[] = "qsf"; char szQsd[] = "qsd"; export_t EXPORTS[] = { { szQsi, (void*) qsi }, { szQss, (void*) qss }, { szQsc, (void*) qsc }, { szQsui, (void*) qsui }, { szQsus, (void*) qsus }, { szQsuc, (void*) qsuc }, { szQsf, (void*) qsf }, { szQsd, (void*) qsd }, { NULL, NULL }, };