forked from KolibriOS/kolibrios
Quicksort dll and example.
git-svn-id: svn://kolibrios.org@3402 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
18616a95fe
commit
d21d1d7b9c
2
programs/develop/libraries/qs/compile.bat
Normal file
2
programs/develop/libraries/qs/compile.bat
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
gcc -c -o qs.obj qs.c
|
||||||
|
pause
|
4
programs/develop/libraries/qs/example/compile.bat
Normal file
4
programs/develop/libraries/qs/example/compile.bat
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
gcc -c example.c
|
||||||
|
ld -nostdlib -T kolibri.ld -o example.kex start.o kolibri.o stdlib.o string.o example.o
|
||||||
|
objcopy example.kex -O binary
|
||||||
|
pause
|
88
programs/develop/libraries/qs/example/console.c
Normal file
88
programs/develop/libraries/qs/example/console.c
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
|
||||||
|
///===========================
|
||||||
|
|
||||||
|
#define CON_COLOR_BLUE 1
|
||||||
|
#define CON_COLOR_GREEN 2
|
||||||
|
#define CON_COLOR_RED 4
|
||||||
|
#define CON_COLOR_BRIGHT 8
|
||||||
|
/* öâåò ôîíà */
|
||||||
|
#define CON_BGR_BLUE 0x10
|
||||||
|
#define CON_BGR_GREEN 0x20
|
||||||
|
#define CON_BGR_RED 0x40
|
||||||
|
#define CON_BGR_BRIGHT 0x80
|
||||||
|
|
||||||
|
///===========================
|
||||||
|
|
||||||
|
void (* _stdcall con_init)(unsigned w_w, unsigned w_h, unsigned s_w, unsigned s_h, const char* t);
|
||||||
|
void (* _cdecl printf)(const char* format,...);
|
||||||
|
void (* _stdcall _exit)(char bCloseWindow);
|
||||||
|
void (* __stdcall gets)(char* str, int n);
|
||||||
|
int (* __stdcall getch)(void);
|
||||||
|
int (* __stdcall con_get_font_height)(void);
|
||||||
|
int (* __stdcall con_set_cursor_height)(int new_height);
|
||||||
|
unsigned (*__stdcall con_get_flags)(void);
|
||||||
|
unsigned (*__stdcall con_set_flags)(unsigned new_flags);
|
||||||
|
void (*__stdcall con_cls)(void);
|
||||||
|
|
||||||
|
///===========================
|
||||||
|
|
||||||
|
void CONSOLE_INIT(char title[])
|
||||||
|
{
|
||||||
|
kol_struct_import *imp;
|
||||||
|
|
||||||
|
imp = kol_cofflib_load("/sys/lib/console.obj");
|
||||||
|
if (imp == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
con_init = ( _stdcall void (*)(unsigned, unsigned, unsigned, unsigned, const char*))
|
||||||
|
kol_cofflib_procload (imp, "con_init");
|
||||||
|
if (con_init == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
printf = ( _cdecl void (*)(const char*,...))
|
||||||
|
kol_cofflib_procload (imp, "con_printf");
|
||||||
|
if (printf == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
_exit = ( _stdcall void (*)(char))
|
||||||
|
kol_cofflib_procload (imp, "con_exit");
|
||||||
|
if (_exit == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
gets = ( _stdcall void (*)(char*, int))
|
||||||
|
kol_cofflib_procload (imp, "con_gets");
|
||||||
|
if (gets == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
getch = ( _stdcall int (*)(void))
|
||||||
|
kol_cofflib_procload (imp, "con_getch2");
|
||||||
|
if (getch == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
con_get_font_height = ( _stdcall int (*)(void))
|
||||||
|
kol_cofflib_procload (imp, "con_get_font_height");
|
||||||
|
if (con_get_font_height == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
con_set_cursor_height = ( _stdcall int (*)(int))
|
||||||
|
kol_cofflib_procload (imp, "con_set_cursor_height");
|
||||||
|
if (con_set_cursor_height == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
con_get_flags = ( _stdcall unsigned (*)(void))
|
||||||
|
kol_cofflib_procload (imp, "con_get_flags");
|
||||||
|
if (con_get_flags == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
con_set_flags = ( _stdcall unsigned (*)(unsigned))
|
||||||
|
kol_cofflib_procload (imp, "con_set_flags");
|
||||||
|
if (con_set_flags == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
con_cls = ( _stdcall void (*)(void))
|
||||||
|
kol_cofflib_procload (imp, "con_cls");
|
||||||
|
if (con_cls == NULL)
|
||||||
|
kol_exit();
|
||||||
|
|
||||||
|
con_init(-1, -1, -1, -1, title);
|
||||||
|
}
|
61
programs/develop/libraries/qs/example/example.c
Normal file
61
programs/develop/libraries/qs/example/example.c
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
|
||||||
|
#include "kolibri.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
#include "string.h"
|
||||||
|
|
||||||
|
#include "console.c"
|
||||||
|
|
||||||
|
|
||||||
|
void (* __stdcall qsi)(int* d, int n);
|
||||||
|
|
||||||
|
/// ===========================================================
|
||||||
|
|
||||||
|
void kol_main()
|
||||||
|
{
|
||||||
|
|
||||||
|
#define NUM 20000
|
||||||
|
|
||||||
|
kol_struct_import *imp_qs;
|
||||||
|
|
||||||
|
int *a;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
CONSOLE_INIT("Example");
|
||||||
|
|
||||||
|
imp_qs = kol_cofflib_load("/sys/lib/qs.obj");
|
||||||
|
qsi = ( _stdcall void (*)(int*, int))
|
||||||
|
kol_cofflib_procload (imp_qs, "qsi");
|
||||||
|
|
||||||
|
a = malloc(NUM*sizeof(int));
|
||||||
|
|
||||||
|
for (i = 0; i < NUM; i++)
|
||||||
|
*(a+i) = random(10000);
|
||||||
|
|
||||||
|
for (i = 0; i < 5; i++)
|
||||||
|
printf("%7d", *(a+i));
|
||||||
|
|
||||||
|
printf (" ...");
|
||||||
|
|
||||||
|
for (i = NUM-5; i < NUM; i++)
|
||||||
|
printf("%7d", *(a+i));
|
||||||
|
|
||||||
|
qsi(a, NUM);
|
||||||
|
|
||||||
|
printf ("\n");
|
||||||
|
|
||||||
|
for (i = 0; i < 5; i++)
|
||||||
|
printf("%7d", *(a+i));
|
||||||
|
|
||||||
|
printf (" ...");
|
||||||
|
|
||||||
|
for (i = NUM-5; i < NUM; i++)
|
||||||
|
printf("%7d", *(a+i));
|
||||||
|
|
||||||
|
|
||||||
|
free(a);
|
||||||
|
|
||||||
|
_exit(0);
|
||||||
|
kol_exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// ===========================================================
|
90
programs/develop/libraries/qs/example/kolibri.h
Normal file
90
programs/develop/libraries/qs/example/kolibri.h
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
|
||||||
|
#define NULL ((void*)0)
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned p00 __attribute__((packed));
|
||||||
|
unsigned p04 __attribute__((packed));
|
||||||
|
unsigned p08 __attribute__((packed));
|
||||||
|
unsigned p12 __attribute__((packed));
|
||||||
|
unsigned p16 __attribute__((packed));
|
||||||
|
char p20 __attribute__((packed));
|
||||||
|
char *p21 __attribute__((packed));
|
||||||
|
} kol_struct70 __attribute__((packed));
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned p00 __attribute__((packed));
|
||||||
|
char p04 __attribute__((packed));
|
||||||
|
char p05[3] __attribute__((packed));
|
||||||
|
unsigned p08 __attribute__((packed));
|
||||||
|
unsigned p12 __attribute__((packed));
|
||||||
|
unsigned p16 __attribute__((packed));
|
||||||
|
unsigned p20 __attribute__((packed));
|
||||||
|
unsigned p24 __attribute__((packed));
|
||||||
|
unsigned p28 __attribute__((packed));
|
||||||
|
unsigned p32[2] __attribute__((packed));
|
||||||
|
unsigned p40 __attribute__((packed));
|
||||||
|
} kol_struct_BDVK __attribute__((packed));
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
char *name __attribute__((packed));
|
||||||
|
void *data __attribute__((packed));
|
||||||
|
} kol_struct_import __attribute__((packed));
|
||||||
|
|
||||||
|
|
||||||
|
void kol_exit();
|
||||||
|
void kol_sleep(unsigned d);
|
||||||
|
void kol_wnd_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c);
|
||||||
|
void kol_wnd_move(unsigned x, unsigned y);
|
||||||
|
void kol_wnd_caption(char *s);
|
||||||
|
void kol_event_mask(unsigned e);
|
||||||
|
unsigned kol_event_wait();
|
||||||
|
unsigned kol_event_wait_time(unsigned time);
|
||||||
|
unsigned kol_event_check();
|
||||||
|
void kol_paint_start();
|
||||||
|
void kol_paint_end();
|
||||||
|
void kol_paint_pixel(unsigned x, unsigned y, unsigned c);
|
||||||
|
void kol_paint_bar(unsigned x, unsigned y, unsigned w, unsigned h, unsigned c);
|
||||||
|
void kol_paint_line(unsigned x1, unsigned y1, unsigned x2, unsigned y2, unsigned c);
|
||||||
|
void kol_paint_string(unsigned x, unsigned y, char *s, unsigned c);
|
||||||
|
void kol_paint_image(unsigned x, unsigned y, unsigned w, unsigned h, char *d);
|
||||||
|
void kol_paint_image_pal(unsigned x, unsigned y, unsigned w, unsigned h, char *d, unsigned *palette);
|
||||||
|
unsigned kol_key_get();
|
||||||
|
unsigned kol_key_control();
|
||||||
|
void kol_key_lang_set(unsigned lang);
|
||||||
|
unsigned kol_key_lang_get();
|
||||||
|
void kol_key_mode_set(unsigned mode);
|
||||||
|
unsigned kol_key_mode_get();
|
||||||
|
void kol_btn_define(unsigned x, unsigned y, unsigned w, unsigned h, unsigned d, unsigned c);
|
||||||
|
unsigned kol_btn_get();
|
||||||
|
void kol_btn_type(unsigned t);
|
||||||
|
unsigned kol_mouse_pos();
|
||||||
|
unsigned kol_mouse_posw();
|
||||||
|
unsigned kol_mouse_btn();
|
||||||
|
void kol_board_putc(char c);
|
||||||
|
void kol_board_puts(char *s);
|
||||||
|
void kol_board_puti(int n);
|
||||||
|
int kol_file_70(kol_struct70 *k);
|
||||||
|
kol_struct_import* kol_cofflib_load(char *name);
|
||||||
|
void* kol_cofflib_procload (kol_struct_import *imp, char *name);
|
||||||
|
unsigned kol_cofflib_procnum (kol_struct_import *imp);
|
||||||
|
void kol_cofflib_procname (kol_struct_import *imp, char *name, unsigned n);
|
||||||
|
unsigned kol_system_end(unsigned param);
|
||||||
|
unsigned kol_system_cpufreq();
|
||||||
|
unsigned kol_system_mem();
|
||||||
|
unsigned kol_system_memfree();
|
||||||
|
unsigned kol_system_time_get();
|
||||||
|
unsigned kol_system_date_get();
|
||||||
|
void kol_path_file2dir(char *dir, char *fname);
|
||||||
|
void kol_path_full(char *full, char *fname);
|
||||||
|
void kol_screen_wait_rr();
|
||||||
|
void kol_screen_get_size(unsigned *w, unsigned *h);
|
||||||
|
unsigned kol_skin_height();
|
||||||
|
unsigned kol_thread_start(unsigned start, unsigned stack);
|
||||||
|
unsigned kol_time_tick();
|
||||||
|
unsigned kol_sound_speaker(char data[]);
|
||||||
|
unsigned kol_process_info(unsigned slot, char buf1k[]);
|
||||||
|
int kol_process_kill_pid(unsigned process);
|
20
programs/develop/libraries/qs/example/kolibri.ld
Normal file
20
programs/develop/libraries/qs/example/kolibri.ld
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
/*OUTPUT_FORMAT("binary")*/
|
||||||
|
ENTRY(Start)
|
||||||
|
SECTIONS
|
||||||
|
{
|
||||||
|
.text 0x000000:
|
||||||
|
{
|
||||||
|
*(.text)
|
||||||
|
}
|
||||||
|
|
||||||
|
.data : {
|
||||||
|
*(.data)
|
||||||
|
hEnd = . ;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bss :
|
||||||
|
{
|
||||||
|
*(.bss)
|
||||||
|
}
|
||||||
|
Memory = . ;
|
||||||
|
}
|
14
programs/develop/libraries/qs/example/stdlib.h
Normal file
14
programs/develop/libraries/qs/example/stdlib.h
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
|
||||||
|
#define RAND_MAX 0x7FFFU
|
||||||
|
|
||||||
|
#define isspace(c) ((c)==' ')
|
||||||
|
#define abs(i) (((i)<0)?(-(i)):(i))
|
||||||
|
|
||||||
|
#define random(num) ((rand()*(num))/((RAND_MAX+1)))
|
||||||
|
|
||||||
|
void* malloc(unsigned size);
|
||||||
|
void free(void *pointer);
|
||||||
|
void* realloc(void* pointer, unsigned size);
|
||||||
|
|
||||||
|
void srand (unsigned seed);
|
||||||
|
int rand (void);
|
12
programs/develop/libraries/qs/example/string.h
Normal file
12
programs/develop/libraries/qs/example/string.h
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
|
||||||
|
#define NULL ((void*)0)
|
||||||
|
|
||||||
|
void* memset(void *mem, int c, unsigned size);
|
||||||
|
void* memcpy(void *dst, const void *src, unsigned size);
|
||||||
|
|
||||||
|
void strcat(char strDest[], char strSource[]);
|
||||||
|
int strcmp(const char* string1, const char* string2);
|
||||||
|
void strcpy(char strDest[], const char strSource[]);
|
||||||
|
char* strncpy(char *strDest, const char *strSource, unsigned n);
|
||||||
|
int strlen(const char* string);
|
||||||
|
char *strchr(const char* string, int c);
|
339
programs/develop/libraries/qs/qs.c
Normal file
339
programs/develop/libraries/qs/qs.c
Normal file
@ -0,0 +1,339 @@
|
|||||||
|
|
||||||
|
///===========================================
|
||||||
|
///
|
||||||
|
/// Áèáëèîòåêà ôóíêöèé áûñòðîé ñîðòèðîâêè
|
||||||
|
///
|
||||||
|
///
|
||||||
|
/// Áàçîâûé êîä áûë âçÿò ñ ñàéòà 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 },
|
||||||
|
};
|
51
programs/develop/libraries/qs/qs.h
Normal file
51
programs/develop/libraries/qs/qs.h
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
|
||||||
|
///===========================================
|
||||||
|
///
|
||||||
|
/// Áèáëèîòåêà ôóíêöèé áûñòðîé ñîðòèðîâêè
|
||||||
|
///
|
||||||
|
///
|
||||||
|
/// Áàçîâûé êîä áûë âçÿò ñ ñàéòà algolist.manual.ru
|
||||||
|
///
|
||||||
|
/// Ñêîìïîíîâàë À. Áîãîìàç aka Albom (albom85@yandex.ru)
|
||||||
|
///===========================================
|
||||||
|
|
||||||
|
|
||||||
|
///===========================================
|
||||||
|
/// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà int (4 áàéòà)
|
||||||
|
///===========================================
|
||||||
|
void qsi(int *a, int n);
|
||||||
|
|
||||||
|
///===========================================
|
||||||
|
/// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà short int (2 áàéòà)
|
||||||
|
///===========================================
|
||||||
|
void qss(short *a, int n);
|
||||||
|
|
||||||
|
///===========================================
|
||||||
|
/// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà char (1 áàéò)
|
||||||
|
///===========================================
|
||||||
|
void qsc(char *a, int n);
|
||||||
|
|
||||||
|
///===========================================
|
||||||
|
/// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà unsigned int (4 áàéòà)
|
||||||
|
///===========================================
|
||||||
|
void qsui(unsigned *a, int n);
|
||||||
|
|
||||||
|
///===========================================
|
||||||
|
/// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà unsigned short int (2 áàéòà)
|
||||||
|
///===========================================
|
||||||
|
void qsus(unsigned short *a, int n);
|
||||||
|
|
||||||
|
///===========================================
|
||||||
|
/// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà unsigned char (1 áàéò)
|
||||||
|
///===========================================
|
||||||
|
void qsuc(unsigned char *a, int n);
|
||||||
|
|
||||||
|
///===========================================
|
||||||
|
/// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà float (4 áàéòà)
|
||||||
|
///===========================================
|
||||||
|
void qsf(float *a, int n);
|
||||||
|
|
||||||
|
///===========================================
|
||||||
|
/// Ñîðòèðîâêà äëÿ ïåðåìåííûõ òèïà double (8 áàéò)
|
||||||
|
///===========================================
|
||||||
|
void qsd(double *a, int n);
|
9
programs/develop/libraries/qs/readme.txt
Normal file
9
programs/develop/libraries/qs/readme.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
|
||||||
|
|
||||||
|
Áèáëèîòåêà ôóíêöèé áûñòðîé ñîðòèðîâêè qs version 0.1
|
||||||
|
|
||||||
|
|
||||||
|
Áàçîâûé êîä áûë âçÿò ñ ñàéòà algolist.manual.ru
|
||||||
|
|
||||||
|
Ñêîìïîíîâàë À. Áîãîìàç aka Albom (albom85@yandex.ru)
|
||||||
|
|
BIN
programs/system/shell/bin/rus/shell
Normal file
BIN
programs/system/shell/bin/rus/shell
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user