#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); // 在兩個區中繼續分區 } }