~那可以看看这个
~
程序代码:
#include<stdio.h>
void fun( const char* [],size_t,int (*)( const void*,const void* ) );
int check(const char* [],size_t,size_t,int (*)( const void*,const void* ) );
int comp( const void*,const void* );
int _strcmp( const char*,const char* );
void reset( const void** ,size_t );
void swap( void*,void* );
int main( void )
{
#define __ARR_LEN( s ) \
(sizeof (s)/sizeof (*s))
char str[5][100];
const char* p[__ARR_LEN(str)];
size_t i;
puts("Input 5 strings:");
for (i=0;i!=__ARR_LEN(str);++i)
{
fgets(str[i],__ARR_LEN(*str),stdin);
p[i]=str[i];
}
fun(p,__ARR_LEN(str),comp);
puts("--------------------");
for (i=0;i!=__ARR_LEN(str);++i)
printf("%s",p[i]);
return 0;
#undef __ARR_LEN
}
void fun( const char* str[],size_t n,int (*comp)( const void*,const void* ) )
{
while (check(str,0,n,comp)!=n-1)
reset(( const void** )str,n);
}
int check(const char* str[],size_t i,size_t n,int (*comp)( const void*,const void* ) )
{
if (i>=n-1)
return i;
for (--n;(i!=n)&&(comp(str[i],str[i+1])==0);++i);
return i;
}
int comp( const void* p,const void* q )
{
return _strcmp(p,q)>0?1:0;
}
int _strcmp( const char* p,const char* q )
{
for (;*p&&*q&&(*p==*q);++p,++q);
return *p-*q;
}
#include<stdlib.h>
void reset( const void** p,size_t n )
{
size_t i;
for (i=0;i!=n;++i)
swap(&p[i],&p[rand()%n]);
}
void swap( void* p,void* q )
{
const void** const _p=( const void** const )p;
const void** const _q=( const void** const )q;
const void* const t=*_p;
*_p=*_q;
*_q=t;
}
[此贴子已经被作者于2018-4-27 02:57编辑过]









