统计求最大、最小元素的平均比较次数

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define NMAX 10 
int rando(int a[],int n){
	int i;
	for(i=0;i<n;i++)
		a[i]=rand()%20+1;
}
int MaxMin(int a[],int &CompCount){
	int Max=a[0];
  int	Min=a[0];
	CompCount=0;
	int i;
	for(i=1;i<10;i++){
		if(a[i]>Max){
				CompCount++;
				Max=a[i];
}
	else{
		if(a[i]<Min){
				CompCount++;
				Min=a[i];
}
}
}
printf("比较次数:%d 最大数:%d 最小数:%d\n",CompCount,Max,Min);//打印可以放在自定义函数中

}

int main(){
	int a[NMAX];
	int n=10;//10个数字
	int Comp=0,sumComp=0;
	srand((unsigned)time(NULL));//随机数种子,保证每次出来的随机数不一样
  for(int m=0;m<10;m++){
		rando(a,n);
		printf("第%d次十个随机数是:\n",m+1);
		for(int i=0;i<10;i++)
    	printf("%d ",a[i]);
		printf("\n");
		MaxMin(a,Comp);
		sumComp+=Comp;
}
	printf("执行10次元素平均比较次数:%.2lf",1.0*sumComp/10);
}
``
心得:
1.宏定义(#define与引入头文件均不需要分号)
2.printf放在自定义函数中,就不需要传参数在主函数中输出啦
3.随机数
 1.用rand函数,必须引入#include<stdlib.h>头文件
 2.公式:rand()%(大-小+1)+小,如随机10~20的数,即rand()%11+1
 3.使用时必须搭配 srand函数
    srand函数作用:随机数初始化函数
    若将srand()括号中的数设为定值,那么这次出现的随机数与下次出现的随机数一样
    如 srand(1);   随机三个数,这次随机出来的是 8,9 ,10  那么下次运行随机出来的也是8,9,10
    所以我们要将srand括号里的参数设为一直变化的值,比如时间
4.获取时间的方法:
    1.引入头文件 #include<time.h>
    2.使用函数 time(NULL); 
5.配合srand使用:
    因为time(NULL)函数传回来的是时间类型的参数,所以我们把它变为无类型的 ,(unsigned)time(NULL)
    即srand((unsigned)time(NULL));
问题目标:随机产生10个数字,找出其中最大和最小元素并统计平均比较次数
选择的数据结构:数组
算法策略:选择排序

posted @ 2021-03-16 11:29  StuAndrew  阅读(662)  评论(0)    收藏  举报