// 冒泡排序,输入一个整数,下一行再输入一行数,对这些数按升序排列
#include <stdio.h>
void ARR(int N, int arr[50]) // 将输入数据读入原数组
// 在形参为数组的时候它会退化成指针以下两种算法完全正确
//  int ARR(int N,int *arr)//显式表明是指针
//  int ARR(int N,int arr[50])//隐式转换为指针
{
    int a;
    for (int i = 0; i < N; i++) {
        scanf("%d", &a);
        *(arr + i) = a;
    }
} // 存值进数组

void BUBBLE(int N, int* arr) {
    int temp = 0;
    for (int i = 0; i < N - 1; i++) {
        for (int j = 0; j < N - 1 - i; j++) {
            if (*(arr + j) < *(arr + j + 1)) { // 降序交换
                temp = *(arr + j);
                *(arr + j) = *(arr + j + 1);
                *(arr + j + 1) = temp;
            }
        }
    }
}

int main() {
    int n;

    int arr[50] = {0};
    scanf("%d", &n);
    ARR(n, arr); // 个数和数组首元素的地址,这样就可以修改被调函数中的数值了
    BUBBLE(n, arr);

    for (int i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
}