编辑代码

#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*/