📄 zhongshu.c
字号:
#include "stdio.h"
#define MAXSIZE 15
typedef struct {
int key;
} NodeType;
typedef struct {
NodeType r[MAXSIZE + 1];
int length;
} SqList;
int Partition(SqList *L,int p,int r)
{
int i=p;int j=r+1;int t;
int x=L->r[p].key;
while(1)
{while(L->r[++i].key<x&&i<r);
while(L->r[--j].key>x);
if(i>=j)break;
t=L->r[i].key;
L->r[i].key=L->r[j].key;
L->r[j].key=t;
}
L->r[p].key=L->r[j].key;
L->r[j].key=x;
return j;
}
void QuickSort(SqList *L,int p,int r)
{int q;
if(p<r)
{
q=Partition(L,p,r);
QuickSort(L,p,q-1);
QuickSort(L,q+1,r);
}
}
int median(SqList *L,int a,int b)
{
int med;
if((a+b)%2==0)
med=(a+b)/2;
else
med=(a+b-1)/2;
return med;
}
int L1(SqList *L,int med)
{
while(med>=1&&med<=L->length)
{ if(L->r[med].key==L->r[med-1].key)
med--;
else
return med-1;
}
}
int R1(SqList *L,int med)
{
while(med>=1&&med<=L->length)
{ if(L->r[med].key==L->r[med+1].key)
med++;
else
return med+1;
}
}
void mode(SqList *L,int a,int b,int *max_num,int *max_count)
{
if(a==b)
return ;
else
{
int l1,r1;
int med,j,k;
k=j=med=median(L,a,b);
l1=L1(L,med);
r1=R1(L,j);
if(*max_count<r1-l1-1)
{
*max_count=r1-l1-1;
*max_num=L->r[k].key;
}
if(l1-a+1>*max_count)
mode(L,a,l1,max_num,max_count);
if(b-r1+1>*max_count)
mode(L,r1,b,max_num,max_count);
}
}
void main()
{ SqList *L;
int i;
int max_num=0;
int max_count=0;
int n;
printf("enter array's length\n");
scanf("%d",&n);
printf("enter array's elements\n");
for(i=1;i<=n;i++)
scanf("%d",&L->r[i].key);
for(i=1;i<=n;i++)
printf("%d ",L->r[i].key);
printf("\n");
L->length=n;
QuickSort(L,1,L->length);
for(i=1;i<=n;i++)
printf("%d ",L->r[i].key);
printf("\n");
mode(L,1,L->length, &max_num,&max_count);
printf("zhongshu:%d\n",max_num);
printf("cishu:%d\n",max_count);
for(i=1;i<=n;i++)
printf("%d ",L->r[i].key);
printf("\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -