查找众数

#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); // 在两个区中继续分区 
    }
}

 

posted on 2017-12-07 21:47  暗影蔽日  阅读(123)  评论(0编辑  收藏  举报

导航