Пузырьковая сортировка
Как запрограммировать сортировку массивов A и B?
Как отсортировать 2, 3,… массива?
Как запрограммировать сортировку массивов A и B?
Как отсортировать 2, 3,… массива?
Простое решение: сдублировать фрагмент кода, сортирующего A
Как отсортировать 2, 3,… массива?
Хорошее решение:
описать процедуру сортировки и вызвать ее для A и B
Как сделать гибкой процедуру сортировки?
Хорошее решение:
сделать критерий сортировки одним из параметров процедуры сортировки
Как устранить зависимость от критерия сортировки?
Как сделать гибкой процедуру сортировки?
void main() {
const int N = 10;
int A[N], int B[2*N];
// заполнить массивы A,B
// вывести массивы A,B
// сортировать A по возрастанию
bubble_sort(A,N,is_greater);
// сортировать B по убыванию
bubble_sort(B,2*N,is_less);
// вывести массивы A,B
}
Разные критерии сортировки
Единая процедура сортировки, инвариантная
к критерию
Как сделать гибкой процедуру сортировки?
void main() {
const int N = 10;
int A[N], int B[2*N];
// заполнить массивы A,B
// вывести массивы A,B
// сортировать A по возрастанию
bubble_sort(A,N,is_greater);
// сортировать B по убыванию
bubble_sort(B,2*N,is_less);
// вывести массивы A,B
}
Как устранить зависимость от базового типа?
Решение:
Сделать универсальным сравнение
Сделать универсальной перестановку
Как сделать гибкой процедуру сортировки?
// процедура сравнения «x < y»
int is_less_i(const void *x,
const void *y) {
return *(int*)x < *(int*) y;
}
// процедура сравнения «x < y»
int is_more_f(const void *x,
const void *y) {
return *(float*)x > *(float*) y;
}
void main() {
const int N = 10;
int A[N], float B[2*N];
// заполнить массивы A,B
// вывести массивы A,B
// сортировать A по убыванию
bubble_sort(A,N,sizeof(int),
is_less_i);
// сортировать B по возрастанию
bubble_sort(B,2*N,sizeof(float),
is_more_f);
// вывести массивы A,B
}
memcpy() из string.h
копирует область памяти указанного размера
Для перестановки надо знать адреса элементов и их размер
Процедура сравнения «знает» какого типа элементы и умеет их сравнивать, получив адреса
При вызове процедуры сортировки надо указать размер базового типа и подходящий критерий
Как сделать гибкой процедуру сортировки?
// процедура сравнения a.x < b.x
int cmp_by_y(const void *a,
const void *b) {
return ((Point*)a)->y >
((Point*)b)->y;
}
void main() {
const int N = 10;
Point A[N];
// заполнить массив A
// вывести массивы A
// сортировать A по убыванию x
bubble_sort(A,N,sizeof(Point),
cmp_by_x);
// сортировать A по возрастанию y
// вывести массив A
bubble_sort(A,N,sizeof(Point),
cmp_by_y);
// вывести массив A
}
Пользовательский тип «Точка»
Процедура сравнения элементов типа «Точка»
Сортировка массива точек по убыванию абсцисс
Сортировка массива точек по возрастанию ординат
Если не удалось найти и скачать доклад-презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:
Email: Нажмите что бы посмотреть