. 定叉长度为了的整型教組,采用函数调用实现按照从大到小的 顺序排序。在主西数中输出排序前和排序后的数組。按以下四种方法实 现: (1)实参、形参为数组名; (2)实参为数组名,形参为指针麥量; (3) 实参为指针变量,形参为数组名: (4)实参为指针变量,形参为指针变量。
时间: 2024-03-20 20:43:37 浏览: 98
函数模板对数组冒泡排序
4星 · 用户满意度95%
好的,下面是四种方法的代码实现:
(1) 实参、形参为数组名:
```c
#include <stdio.h>
void sort1(int arr[], int len) {
int temp;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int len = sizeof(arr) / sizeof(arr[0]);
printf("排序前:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
sort1(arr, len);
printf("排序后:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
(2) 实参为数组名,形参为指针变量:
```c
#include <stdio.h>
void sort2(int *arr, int len) {
int temp;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (*(arr + j) < *(arr + j + 1)) {
temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int len = sizeof(arr) / sizeof(arr[0]);
printf("排序前:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
sort2(arr, len);
printf("排序后:");
for (int i = 0; i < len; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
(3) 实参为指针变量,形参为数组名:
```c
#include <stdio.h>
void sort3(int arr[], int len) {
int temp;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (arr[j] < arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int len = sizeof(arr) / sizeof(arr[0]);
int *p = arr;
printf("排序前:");
for (int i = 0; i < len; i++) {
printf("%d ", *(p + i));
}
printf("\n");
sort3(p, len);
printf("排序后:");
for (int i = 0; i < len; i++) {
printf("%d ", *(p + i));
}
printf("\n");
return 0;
}
```
(4) 实参为指针变量,形参为指针变量:
```c
#include <stdio.h>
void sort4(int *arr, int len) {
int temp;
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - 1 - i; j++) {
if (*(arr + j) < *(arr + j + 1)) {
temp = *(arr + j);
*(arr + j) = *(arr + j + 1);
*(arr + j + 1) = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
int len = sizeof(arr) / sizeof(arr[0]);
int *p = arr;
printf("排序前:");
for (int i = 0; i < len; i++) {
printf("%d ", *(p + i));
}
printf("\n");
sort4(p, len);
printf("排序后:");
for (int i = 0; i < len; i++) {
printf("%d ", *(p + i));
}
printf("\n");
return 0;
}
```
以上四种方法都可以实现对整型数组的从大到小排序。其中,第一种方法的形参为数组名,与数组本身有相同的地址,因此可以直接对数组进行排序;第二种方法的形参为指针变量,需要用指针运算符 `*` 对指针进行解引用操作;第三种方法的实参为指针变量,需要用指针运算符 `*` 对指针进行解引用操作;第四种方法的实参和形参都为指针变量,需要用指针运算符 `*` 对指针进行解引用操作。
阅读全文