用c++实现众数重数问题

#include
#include
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];
    fstream ofile;
    ofile.open("D:\\imput.txt",ios::in);
    for(int i=0;i<4;i++)
    ofile>>arr[i];//从文件中输入 
    QuickSort(arr,0,3);
    fstream oufile;
    oufile.open("D:\\output.txt",ios::out);
    int z=-1,c=-1;//众数、重数 
    Searchz(arr,z,c);
    oufile<<"众数为:"<" 重数为:"<//输出到文件中 
    ofile.close();
    oufile.close();
}
void Searchz(int arr[],int &z,int &c)
{
    int zt=-1,ct=-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;//临时赋给真正的 
      }
    } 
} 
//快速排序 
void QuickSort(int a[],int p,int r)
{
    if(pint 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]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;
}

如果不用文件输入输出的话,代码可以正常运行,但是用文件输入输出,结果永远都是众数为0重数为2,不知道问题出在哪里


#include <iostream>
#include <algorithm>
using namespace std;

int num=0; //存储众数
int sum=0; //存储重数

int count(int a[],int s,int e){//计算中间数出现的次数
    int n=a[(s+e)/2];
    int counts=0;
    for(int i=s;i<e;i++)  { 
         if(a[i]==n) 
              counts++;
    }
   return counts;
}

int start(int a[],int s,int e){ //找到中间数出现的位置
     int x=0;
     for(in   t i=s;i<e;i++)  {
        if(a[i]==a[(p+q)/2]) {
            x=i;
            break;
       }
    }
    return x;
}

void mode(int a[],int s,int e){
     int  tnum=(s+e)/2;          
     int  tsum=count(a,s,e);    
     int left=start(a,s,e);     
     if(tsum>sum)  { 
    sum=tsum;           num=a[tnum];
     }
    if(q-(left+tsum)>sum) mode(a,left+tsum,e);
    if(left>sum) mode(a,s,left);
}

int main()
{
    int a[10]={2,1,3,2,5,2,3,3,3,3};
    cout<<mode(a,0,9)<<endl;
    return 0;
}


#include <iostream>
#include <unordered_map>
#include <vector>

using namespace std;

int main() {
    unordered_map<int, int> count; // 存储每个数出现的次数
    vector<int> nums = {1, 2, 2, 2, 3, 5}; // 给定的多重集合 S
    int mode = 0; // 众数
    int mode_count = 0; // 众数的重数

    for (int num : nums) {
        count[num]++; // 统计每个数出现的次数
        if (count[num] > mode_count) { // 如果某个数的次数大于当前的众数次数,更新众数和重数
            mode = num;
            mode_count = count[num];
        }
    }

    cout << "众数是 " << mode << ",重数是 " << mode_count << endl;

    return 0;
}