快排法
程序代码:
/***************************************************************************
呵呵,终于把它作出来了,终于依样画葫芦,把
快排弄出来了。虽然也经历了数次错误,虽然现在还
不能很熟练地使用它,但终究是明白了,程序也正常
运行。
心情很愉快。
***************************************************************************/
#include<stdio.h>
#include<string.h>
#define N 10000
void px(char a[],int i,int j) /*快速排序函数*/
{
char c,V;
int I=i;
int J=j;
V=a[(int)(i+j)/2];
while(1)
{
while(i<J&&a[i]<V)
i++;
while(j>I&&a[j]>V)
j--;
if(i>j)
break;
if(i<j)
{
c=a[i];
a[i]=a[j];
a[j]=c;
}
i++;
j--;
}
if(I<j)
px(a,I,j);
if(i<J)
px(a,i,J);
}
int main(void)
{
char a[N];/*用于输入待检查的数据*/
int i,j,n,k;
printf("下面输入数据,enter结束输入:\n");
gets(a); /*输入数据*/
n=strlen(a);
px(a,0,n-1); /*排序*/
puts(a);
for(i=0;i<n;++i)
{
k=0;
for(j=i;j<n;++j)
if(i!=j&&a[i]==a[j]) /*当遇到相同数据时*/
{
++i;
++k;
}
if(k>0) /*当k值大于0,说明有相同数据,并输出*/
printf("\n共有%d个相同的%c.\n",k+1,a[i]);
}
if(k==0) /* 当k值为0时,说明没有相同数据。*/
printf("没有相同的数据.\n");
system("pause");
return 0;
}