今天练习计算机二级,遇到一道题,需要去掉数组元素的最小最大值,然后求其平均值。这让我联想到了学习stm32时输入捕获实验中也用到过类似的排序去掉最大值最小值的算法,觉得有必要了解一下,所以百度了一下可以用冒泡排序。
代码如下
#include <stdio.h>
int main(){
int nums[10] = {4, 5, 2, 10, 7, 1, 8, 3, 6, 9};
int i, j, temp;
//冒泡排序算法:进行 n-1 轮比较
for(i=0; i<10-1; i++){
//每一轮比较前 n-1-i 个,也就是说,已经排序好的最后 i 个不用比较
for(j=0; j<10-1-i; j++){
if(nums[j] > nums[j+1]){
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
//输出排序后的数组
for(i=0; i<10; i++){
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
针对题目来说,思路如下:排序,去掉首位,然后相加求sum。当然还有一种傻瓜算法,就是直接求最大最小值然后在sum变量中减去这两个值,在这就不在累述了。