#include<iostream>
#include<fstream>
using namespace std;
void Searchz(int arr[],int &z,int &c);
void QuickSort(int a[],int p,int r ) ;
int partition(int a[],int p,int r);
main()
{
int arr[4]={0};
ifstream ofile;
ofile.open("D:\\imput.txt",ios::in);
for(int i=0;i<4;i++)
{
ofile>>arr[i];
cout<<arr[i]<<" ";
}
QuickSort(arr,0,3);
ofstream oufile;
oufile.open("D:\\output.txt",ios::out);
int z=-1,c=-1;//众数、重数
Searchz(arr,z,c);
oufile<<"众数为:"<<z<<" 重数为:"<<c<<endl;
ofile.close();
oufile.close();
}
void Searchz(int arr[],int &z,int &c)
{
int zt=-1,ct=-1;//临时众数、临时重数
//int z=-1,c=-1;//众数、重数
for(int i=0;i<4;i++)
{
if(arr[i]!=zt)
{
zt=arr[i];ct=1;
}
else if(arr[i]==zt)ct++;
if(ct>c)//关键代码,比较出真正的重数
{
c=ct;z=zt;//临时赋给真正的
}
}
// ofile<<"众数为:"<<z<<" 重数为:"<<c<<endl;
}
void QuickSort(int a[],int p,int r)
{
if(p<r)
{
int q=partition(a,p,r);
QuickSort(a,p,q-1);
QuickSort(a,q+1,r);
}
}
int partition(int a[],int p,int r)
{
int i=p,j=r+1;
int x=a[p],temp;
while(1)
{
while(a[++i]<x&&i<r);
while(a[--j]>x);
if(i>=j) break;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
a[p]=a[j];
a[j]=x;
return j;
}
/*难点在于变量的设置,如果只设一个众数和重数,会无限制的覆盖,无法比较,当再设置一对临时众数和重数后 ,由if(ct>c)进行重数的比较
,zt不用再设置if比较,重数确定了那众数也关联确定,可以用个简单的例子进行比较,比如1 2 2 4,for循环到a[3]时,2的ct(c)等于2,4的ct仅为1
,重数众数确定。按升序排列好的数组,众数会挨着,2 1 2 2就会出现问题,重数只会是2*/
把完整代码复制粘贴出来一下
不知道你这个问题是否已经解决, 如果还没有解决的话:函数就是一段封装好的,可以重复使用的代码,它使得我们的程序更加模块化,不需要编写大量重复的代码。
函数可以提前保存起来,并给它起一个独一无二的名字,只要知道它的名字就能使用这段代码。
函数还可以接收数据,并根据数据的不同做出不同的操作,最后再把处理结果反馈给我们。
对于函数的定义来说,使用return语句可以向外提供该函数执行的一下结果;
对于函数的调用者来说,是否可以使用函数中执行的一些操作结果,就在于函数是否使用return语句返回了对应的执行结果。