C语言冒泡排序查找数组极值 - 代码实现与示例

本文将介绍如何使用冒泡排序的方法在 C语言 中在一个整形数组中根据指定的冒泡方向(1 - 正向(从前向后)/2 - 反向(从后向前))和极值类型(1 - 最大值/2 - 最小值)找出极值。

算法原理

题目要求使用冒泡排序的方法找出极值,那么我们就可以在冒泡排序的过程中每轮比较时,根据极值类型判断是否需要交换,从而找到极值。

具体地,当极值类型为最大值时,我们需要将最大值放到最后,因此当冒泡方向为正向时,当a[i]>a[i+1]时,需要交换a[i]和a[i+1];当冒泡方向为反向时,当a[i]<a[i+1]时,需要交换a[i]和a[i+1]。

而当极值类型为最小值时,我们需要将最小值放到最前,因此当冒泡方向为正向时,当a[i]<a[i+1]时,需要交换a[i]和a[i+1];当冒泡方向为反向时,当a[i]>a[i+1]时,需要交换a[i]和a[i+1]。

代码实现

#include <stdio.h>

void findExtreme(int arr[], int n, int direction, int type) {
    int i, j, temp;

    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - i - 1; j++) {
            // 正向排序
            if (direction == 1) {
                // 寻找最大值
                if (type == 1 && arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                } 
                // 寻找最小值
                else if (type == 2 && arr[j] < arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
            // 反向排序
            else if (direction == 2) {
                // 寻找最大值
                if (type == 1 && arr[j] < arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
                // 寻找最小值
                else if (type == 2 && arr[j] > arr[j + 1]) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }

            // 输出每轮排序后的数组
            for (int k = 0; k < n; k++) {
                printf("%d ", arr[k]);
            }
            printf("\n");
        }
    }
}

int main() {
    int n, direction, type;
    int arr[20];

    printf("请输入整数n(n<=20): ");
    scanf("%d", &n);

    printf("请输入 %d 个整数: ", n);
    for (int i = 0; i < n; i++) {
        scanf("%d", &arr[i]);
    }

    printf("请输入冒泡方向(1 - 正向/2 - 反向): ");
    scanf("%d", &direction);

    printf("请输入极值类型(1 - 最大值/2 - 最小值): ");
    scanf("%d", &type);

    printf("排序过程:\n");
    findExtreme(arr, n, direction, type);

    return 0;
}

示例

输入:

10
0 1 2 3 4 5 6 7 8 9
2 1

输出:

9 0 1 2 3 4 5 6 7 8
9 8 0 1 2 3 4 5 6 7
9 8 7 0 1 2 3 4 5 6
9 8 7 6 0 1 2 3 4 5
9 8 7 6 5 0 1 2 3 4
9 8 7 6 5 4 0 1 2 3
9 8 7 6 5 4 3 0 1 2
9 8 7 6 5 4 3 2 0 1
9 8 7 6 5 4 3 2 1 0

总结

本文介绍了使用冒泡排序算法在 C语言 中查找数组极值的方法,并提供了详细的代码实现和示例。通过指定冒泡方向和极值类型,我们可以实现正向/反向查找最大值/最小值。代码中还包含了每轮排序后输出数组的过程,方便理解算法的执行过程。

C语言冒泡排序查找数组极值 - 代码实现与示例

原文地址: https://www.cveoy.top/t/topic/nWpy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录