/***************************************************作业要求: 在数组中查找次大值,并与最后一个元素交换完成日期: 2013年9月3日***************************************************/#include <stdio.h>
// 函数原型int findSecondMaxValueInArray(int a[], int n);
// main函数int main(void){ int a[8] = {2, 5, 1, 3, 2, 3, 4, 6}; // 定义数组 int index; // 待求次大值元素下标 int tmp; // 临时变量,用来交换数组
// 求数组中次大值元素下标 index = findSecondMaxValueInArray(a, 8); // printf("%dn", index);
// 次大值与数组最后一个元素交换 tmp = a[index]; a[index] = a[7]; a[7] = tmp;
// 输出数组……
return 0;}
/****************************************************函数功能: 在数组中查找次大值元素算法思想: (1) 设置两个指针(下标)初始值均为0(指向数组第1个元素); (2) 遍历数组,若当前元素大于最大值,修改最大值下标为当前元素; 修改次大值下标为原来最大值下标; (3) 若当前元素不大于最大值,但大于次大值,则修改次大值下标为 当前元素; (4) 数组遍历结束后,次大值下标即为所求。函数参数: int a[] 待查找元素的数组 int n 数组中元素个数返回值: 返回次大值元素在数组中的下标时间复杂度: O(n):其中n表示数组中元素个数空间复杂度: O(1):借助了三个辅助变量i、max1、max2实现*****************************************************/int findSecondMaxValueInArray(int a[], int n){ int i; // 数组元素索引(下标) int max1 = 0; // 最大值元素下标 int max2 = 0; // 次大值元素下标
for (i = 0; i < n; ++i) { if (a[max1] < a[i]) { max2 = max1; // 原来最大值为新的次大值 max1 = i; // 当前元素为新的最大值 } else if (a[max2] < a[i]) { // 若新的最大值没有出现,但是数组中元素大于次大值 max2 = i; } }
// 返回次大值下标 return max2;}在数组中查找次大值,并与最后一个元素交换—C语言

最后更新于 2022-12-25
部分内容可能已过时,请注意信息时效。
本文采用 CC BY-NC-SA 4.0 许可,转载请注明出处与作者。
支持一下
如果这篇文章对你有帮助,欢迎打赏或分享。
评论