Сортировка вставками без использования индексирования - C (СИ)
Формулировка задачи:
Нужно отсортировать и вывести 2-х мерный масив 10х10 по убыванию не используя индексацию (через указатели).
Поиском нашел кучу вариантов через индексацию, но как их переделать под указатели?
Решение задачи: «Сортировка вставками без использования индексирования»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 10
#define M 10
void mySort(int* );
int main(void)
{
int i, j, arr[N][M];
srand(time(NULL));
for(i = 0; i < N; i++, putchar('\n'))
for(j = 0; j < M; j++)
printf("%3d", arr[i][j] = rand() % 99);
putchar('\n');
mySort(arr[0]);
return 0;
}
void mySort(int* p)
{
int *q, *m, *last = p + N * M, temp;
for(q = p + 1; q < last; q++){
for(m = q; m > p && *(m - 1) < *m; m--){
temp = *(m - 1);
*(m - 1) = *m;
*m = temp;
}
}
for(temp = 0; p < last; p++, temp++){
if(temp && !(temp % M))
putchar('\n');
printf("%3d", *p);
}
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с I/O, генерацией случайных чисел и временем
- Определяем массив размером NxM, где N=10, M=10
- Инициализируем элементы массива случайными числами от 0 до 99
- Выводим массив на экран
- Рекурсивно вызываем функцию сортировки mySort, передавая в нее указатель на первый элемент массива
- В функции mySort определяем указатели на текущий элемент, предыдущий элемент и последний элемент массива
- Используя два вложенных цикла, сортируем массив по возрастанию
- Выводим отсортированный массив на экран
- Возвращаем 0, что означает успешное выполнение программы