C语言冒泡排序查找数组极值 - 代码实现与示例
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语言 中查找数组极值的方法,并提供了详细的代码实现和示例。通过指定冒泡方向和极值类型,我们可以实现正向/反向查找最大值/最小值。代码中还包含了每轮排序后输出数组的过程,方便理解算法的执行过程。
原文地址: https://www.cveoy.top/t/topic/nWpy 著作权归作者所有。请勿转载和采集!