C语言冒泡排序算法实现:找出数组极值并排序
C语言冒泡排序算法实现:找出数组极值并排序
思路:
- 冒泡排序算法的基本思想:相邻的两个元素进行比较,如果符合排序规则就交换位置,直到没有可以交换的元素为止。
- 根据冒泡方向和极值类型确定排序规则,即决定什么情况下可以交换位置。
- 在排序的过程中,每次交换位置都输出当前数组的状态。
代码:
#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 函数进行排序,并输出排序过程。
原文地址: https://www.cveoy.top/t/topic/nWpj 著作权归作者所有。请勿转载和采集!