#include <stdio.h>
#include <stdlib.h>
#include <time.h>
char r[20001];
void main()
{
int i,n,count,k;
int a[20001];
void qk(int m1,int m2); // 函数声明
printf(" input string:");
for(i=1;(r[i] = getchar())!='\n';i++) ;
r[i]='\0';
n = --i;
qk(1,n);
k = 1;
count = 1;
for(i=1;r[i]!='\0';i++)
printf("%c ",r[i]);
puts("");
for(i=1;r[i]!='\0';i++)
{
if(r[i]==r[i+1]) count++;
else {
a[k] = count;
r[k] = r[i];
k++;
count =1;
}
}
for(i=1;a[i]!=0;i++)
printf("%c%d ",r[i],a[i]);
a[0] = a[1];
r[0] = r[1];
for(i=1;a[i]!=0;i++)
{
if(a[0]<a[i]) {
a[0]=a[i];
r[0]=r[i];
}
}
if(a[0]!=1)
printf("重数是%d,众数为%c",a[0],r[0]);
else printf("元素个数均为1");
}
void qk(int m1,int m2) // 快速排序递归函数
{
int i,j;
if(m1<m2)
{
i=m1;
j=m2;
r[0]=r[i]; // 定义第i个数作为分区基准
while(i!=j)
{
while(r[j]>=r[0] && j>i) // 从右至左逐个检查是否大于基准
j=j-1;
if(i<j) {
r[i]=r[j];
i=i+1;
} // 把小于基准的一个数赋给r(i)
while(r[i]<=r[0] && j>i) // 从左至右逐个检查是否小于基准
i=i+1;
if(i<j) {r[j]=r[i];j=j-1;} // 把大于基准的一个数赋给r(j)
} // 通过循环完成分区
r[i]=r[0]; // 分区的基准为r(i)
qk(m1,i-1); qk(i+1,m2); // 在两个区中继续分区
}
}