环境 :Windows10, VS2010
#include <iostream>
#include <string>
using namespace std;
int Partition (int r[],int first,int end) //划分
{
int i=first,j=end;
while (i<j)
{
while (i<j && r[i]<=r[j]) j--;
if (i<j)
{
int temp=r[i];r[i]=r[j];r[j]=temp;
i++;
}
while (i<j && r[i]<=r[j]) i++;
if (i<j)
{
int temp=r[i];r[i]=r[j];r[j]=temp;
j--;
}
}
return i;
}
void Quicksort(int r[], int first, int end) //快速排序
{
int pivot;
if (first<end)
{
pivot = Partition(r, first, end);
Quicksort(r, first, pivot-1);
Quicksort(r, pivot+1, end);
}
}
int mode(int b[],int m) //找出众数与出现次数
{
int i=0,j=0,max = 0,number = 0,many= 0;
max=0;
while(i<m)
{
i = i + number;
number = 0;
for(j=i;j<m;j++) //j = i j从i开始,不再从零开始
{
if(b[j]==b[i])
{
number+=1;
}
else
{
break; //遇到不相等就跳出,不再继续与后面的比
}
if(max<number)
{
max=number;
many=b[i];
}
}
}
cout<<endl<<"这组数据的众数为:"<<many<<endl<<"出现次数为: "<<max<<endl; //把结果输出到屏幕
return 0;
}
void main()
{
int Data[100];
int num;
cout<<"请输入你的数据的个数(不大于100): "<<endl; //请用户输入数据的总数与数据
cin>>num;
cout<<"请输入你的数据(用空格间隔): "<<endl;
for(int i=0; i<num; i++)
{
cin>>Data[i];
}
cout<<"你输入的数据是 "<<endl; //展示数据
for(int j=0; j<num; j++)
{
cout<<Data[j]<<" ";
}
int right = num - 1; //right作为传入的数组右边界
Partition (Data, 0, right); //调用划分
Quicksort(Data, 0, right); //调用快排
cout<<endl<<"排序后的数据是: "<<endl; //查看排序后的数据
for(int i=0; i<num; i++)
{
cout<<Data[i]<<" ";
}
mode(Data, num); //调用mode函数,找到众数
system("pause");
}