是我文件的输入有问题还是代码有问题,他为啥显示我读的都是我赋的初值啊
#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*/