那可以看看这个~
程序代码:
#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编辑过]