Язык программирования C

Скачать в pdf «Язык программирования C»


Алгоритм сортировки часто состоит из трех частей: процедуры сравнения, определяющей способ упорядочения любой пары объектов; процедуры обмена местами, изменяющей порядок следования такой пары; собственно процедуры сортировки, выполняющей сравнение и обмен, пока объекты не окажутся упорядоченными. Сама сортировка независима от вида операций сравнения и обмена, поэтому можно задать сортировку по различным критериям, передавая в алгоритм разные функции сравнения и обмена. Именно этот подход принят в нашей новой программе сортировки.


Алфавитное сравнение двух строк выполняется функцией strcmp, как и раньше. Понадобится также функция numcmp, сравнивающая две строки по критерию числового значения и возвращающая результаты того же типа, что и strcmp. Эти функции объявлены перед main, и в qsort передается указатель на ту из них, какая требуется в текущий момент. Обработка ошибок в аргументах здесь опущена, чтобы сосредоточиться на главном.


#include <stdio.h>


#include <string.h>


#define MAXLINES 5000    /* максимальное количество строк */


char *lineptr[MAXLINES];    /* указатели на строки */


int readlines(char *lineptr[], int nlines); void writelines(char *lineptr[], int nlines);


void qsort(void *lineptr[], int left, int right, int (*comp)(void *, void *)); int numcmp(char *, char *);


/* сортировка строк из входного потока */ main(int argc, char *argv[])

{


int nlines;    /* количество считанных строк */


int numeric =0;    /*1, если числовая сортировка */


if (argc > 1 && strcmp(argv[1], «-n») == 0) numeric = 1;


if ((nlines = readlines(lineptr, MAXLINES)) >= 0) { qsort((void **) lineptr, 0, nlines-1,


(int (*)(void*,void*))(numeric ? numcmp : strcmp)); writelines(lineptr, nlines); return 0;


} else {


printf(«input too big to sortn»); return 1;

Скачать в pdf «Язык программирования C»