C语言冒泡排序算法实现:找出数组极值并排序

思路:

  1. 冒泡排序算法的基本思想:相邻的两个元素进行比较,如果符合排序规则就交换位置,直到没有可以交换的元素为止。
  2. 根据冒泡方向和极值类型确定排序规则,即决定什么情况下可以交换位置。
  3. 在排序的过程中,每次交换位置都输出当前数组的状态。

代码:

#include <stdio.h>

void bubbleSort(int arr[], int n, int direction, int extremeType) {
    int i, j, temp;
    for (i = 0; i < n - 1; i++) {
        for (j = 0; j < n - i - 1; j++) {
            if (direction == 1) { // 正向
                if (extremeType == 1) { // 最大值
                    if (arr[j] < arr[j + 1]) {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                } else if (extremeType == 2) { // 最小值
                    if (arr[j] > arr[j + 1]) {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            } else if (direction == 2) { // 反向
                if (extremeType == 1) { // 最大值
                    if (arr[j] > arr[j + 1]) {
                        temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                } else if (extremeType == 2) { // 最小值
                    if (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, extremeType;
    printf("请输入整数个数 n (n <= 20): ");
    scanf("%d", &n);
    int arr[20];
    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", &extremeType);
    printf("排序过程:\n");
    bubbleSort(arr, n, direction, extremeType);
    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 

说明:

本程序通过 bubbleSort 函数实现冒泡排序。该函数接受四个参数:

  • arr: 整形数组
  • n: 数组元素个数
  • direction: 冒泡方向(1 - 正向,2 - 反向)
  • extremeType: 极值类型(1 - 最大值,2 - 最小值)

函数内部使用两个循环遍历数组,比较相邻元素,根据排序规则进行交换。在每次交换后,程序会输出当前数组的状态,方便观察排序过程。

在 main 函数中,程序首先获取用户输入的数组元素个数、数组元素、冒泡方向和极值类型,然后调用 bubbleSort 函数进行排序,并输出排序过程。

C语言冒泡排序算法实现:找出数组极值并排序

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

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