Проблема с сортировкой массива указателями

Задача: отсортировать в обратном порядке массив через функцию. По моей задумке я передаю в функцию указатель на первый элемент массива.

Разыменовываю и сравниваю p и p+1, если p меньше, тогда меняю значения по адресам. Подскажите, где я накосячил? Реализация хоть немного похожа на правду?

#include <stdio.h>
#include <stdlib.h>
#define n 3

void sort(int* p);
void swap(int* p1, int* p2);
void output_array(int* p);

int main()
{
    int a[n] = {1,2,3};
    sort(a);
    output_array(a);
    return 0;
}

void sort(int* p)
{
    int  box;
    for (int i=0; i<n-1; i++)
        for (int j=i; j<n; j++)
                if (*(p+i) < *(p+j))
                    swap(p+i, p+j);

    return 0;
}

void swap(int *p1, int* p2)
{
    int box = *p1;
    *p1 = *p2;
    *p2 = box;
    return 0;
}

void output_array(int* p)
{
    for (int i=0; i<n; i++)
       printf("%d", *p+i);
    return 0;
}

Ответы (0 шт):