设计一个函数使用冒泡交换的方法在一个整形数组中根据指定的冒泡方向1一正向从前向后2一反向从后向前和极值类型1一最大值2一最小值找出极值。在主函数中通过调用此函数将nn=20个无序的互不相同的整数进行排序并展示排序的过程。提示:1、函数的形式应为:void 函数名int 数组名 int 元素个数 int 冒泡方向 int 极值类型2、排序的规则从小到大或从大到小由调用函数的实际参数决定两种规则均可
以下是一种可能的实现方式:
#include <stdio.h>
void bubble_sort(int arr[], int n, int direction) { int i, j, temp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - i - 1; j++) { if (direction == 1 && arr[j] > arr[j + 1]) { // 正向冒泡 temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } else if (direction == 2 && arr[j] < arr[j + 1]) { // 反向冒泡 temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } }
void find_extreme(int arr[], int n, int direction, int extreme_type) { int i, extreme_index; if (extreme_type == 1) { // 最大值 extreme_index = 0; for (i = 1; i < n; i++) { if ((direction == 1 && arr[i] > arr[extreme_index]) || (direction == 2 && arr[i] < arr[extreme_index])) { extreme_index = i; } } printf("最大值为:%d\n", arr[extreme_index]); } else if (extreme_type == 2) { // 最小值 extreme_index = 0; for (i = 1; i < n; i++) { if ((direction == 1 && arr[i] < arr[extreme_index]) || (direction == 2 && arr[i] > arr[extreme_index])) { extreme_index = i; } } printf("最小值为:%d\n", arr[extreme_index]); } }
int main() { int arr[20], n, i, direction, extreme_type; printf("请输入数组元素个数(不超过20):"); scanf("%d", &n); printf("请输入%d个互不相同的整数:", n); for (i = 0; i < n; i++) { scanf("%d", &arr[i]); } printf("请输入冒泡方向(1一正向,2一反向):"); scanf("%d", &direction); printf("请输入极值类型(1一最大值,2一最小值):"); scanf("%d", &extreme_type); printf("排序前的数组:"); for (i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); bubble_sort(arr, n, direction); printf("排序后的数组:"); for (i = 0; i < n; i++) { printf("%d ", arr[i]); } printf("\n"); find_extreme(arr, n, direction, extreme_type); return 0;
原文地址: https://www.cveoy.top/t/topic/eFsN 著作权归作者所有。请勿转载和采集!