#include "stdio.h"
void swap(int *x,int *y) //交换元素x,y
{
int t;
t=*x;
*x=*y;
*y=t;
}
int partition(int T[],int q,int p,int x) //将<x的元素交换到左边区域,将>x的元素交换到右边区域
{
int i=q,j=p+1,t;
for(;i<j;i++)
if(T[i]==x)
{
t=i;
break;
}
i=q;
while(1)
{
while(T[--j]>x);
while((i<j)&&T[++i]<=x);
if(i>=j)break;
swap(&T[i],&T[j]);
}
swap(&T[t],&T[j]);
return j;
}
void QuickSort(int T[],int q,int p)
{
int z;
if(q<p)
{
z=partition(T,q,p,T[q]);
QuickSort(T,q,z-1);//对左半段排序
QuickSort(T,z+1,p);//对右半段排序
}
}
int Select(int T[],int q,int p,int k)
{
int x,s,j,num,c,d,i;
if(p-q<5)
{
QuickSort(T,q,p);
return T[q+k-1];
}
for(i=0;i<=(p-q-4)/5;i++)
{
int s=q+5*i,t=s+4;
QuickSort(T,s,t);
swap(&T[q+i],&T[s+2]);
}
x=Select(T,q,q+(p-q-4)/5,(p-q-4)/10);//找中位数的中位数
s=partition(T,q,p,x);
j=s-q+1;
num=0;
c=s,d=0;
while(c>d) //将与x相等的元素集中在一起。
{
while(T[c--]==x);
while(c>d&&T[d++]!=x);
swap(&T[d-1],&T[c+1]);
}
for(d=0;d<=j;d++)
if(T[d]==x)
num++;
s=s-num+1;
j=s-q+1;
if(num>=1)
{
if((j<=k)&&(k<=j+num-1))
return T[s];
else
return Select(T,s+num+1,p,k-j-num);
}
else if(k<=j)
return Select(T,q,s,k);
else return Select(T,s,p,k-j);
}
int checkMaster(int T[],int q,int p)
{
int t=Select(T,q,p,(p-q+2)/2);
int num=0;
int i;
for(i=q;i<=p;i++)
{
if(T[i]==t)
num++;
}
if(num>(p-q+2)/2)
return t;
else
return 0;
}
void main(void)
{
int T[16]={1,2,2,2,3,4,3,2,2,4,2,2,6,7,2,2},Master;
Master=checkMaster(T,0,sizeof(T)/sizeof(int)-1);
if(Master==0)
printf("该数组不存在主元素");
else
printf("该数组的主元素为%d\n",Master);
}
四散
- 粉丝: 68
- 资源: 1万+
最新资源
- 大气风格的数字科技代理公司整站模板下载.zip
- 大气风格的自行车网上商城模板下载.rar
- 大气干净风的保险集团公司网页模板下载.zip
- 大气干净风的企业办公商务网站模板下载.zip
- 大气高端的公司商业整站模板下载.zip
- 大气干净风的企业服务项目网页模板下载.zip
- 大气干净蓝色调的设备公司整站模板下载.zip
- 大气高端风的企业管理顾问整站模板下载.zip
- 大气高端风的商业工作室网页模板下载.zip
- 大气高端的美容美发造型师模板下载.zip
- 大气高端干净的公司整站模板下载.zip
- 大气高端精致的企业沙发整站模板下载.zip
- 大气高端精致的个人简历网页模板下载.zip
- 大气高端效果的投资管理顾问网页模板下载.zip
- 大气高端效果的商务企业网站模板下载.zip
- 大气高端效果的职业商务服务网站模板下载.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论1