Сортировка вставками без использования индексирования - 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);
    }
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с I/O, генерацией случайных чисел и временем
  2. Определяем массив размером NxM, где N=10, M=10
  3. Инициализируем элементы массива случайными числами от 0 до 99
  4. Выводим массив на экран
  5. Рекурсивно вызываем функцию сортировки mySort, передавая в нее указатель на первый элемент массива
  6. В функции mySort определяем указатели на текущий элемент, предыдущий элемент и последний элемент массива
  7. Используя два вложенных цикла, сортируем массив по возрастанию
  8. Выводим отсортированный массив на экран
  9. Возвращаем 0, что означает успешное выполнение программы

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы