// 冒泡排序,输入一个整数,下一行再输入一行数,对这些数按升序排列 #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]); } }