• 无类型数据排序实现


    /*
    字典搜索
    问题描述:
    给定一个字典,有若干个单词,每个单词不超过6个字母,以****作为输入结束 
    要求:输入一堆乱序字母作为输入单词,比较字典中的字母,如果输入的单词经过排列组合
    可以与字典中的单词匹配,则输出(如果和多个单词匹配,从小到大输出)
    如果字典单词无匹配,输出:( 
    
    样例输入:
    trap given score refund only tarp work earn course pepper part ******
    resco nfudre aptr seet oresuc
    
    样例输出:
    score
    refund
    part tarp trap
    :(
    course
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 100
    #define N 7
    int char_cmp(const void *,const void *);
    int charpoin_cmp(const void *,const void *);
    void SortDir(void *,int num,int size,int (*)(const void *,const void *));
    void Prin(char **,int);
    void SortDir2(char *mid,int);
    int main(void)
    {
    	char **mid=(char **)malloc(MAX*sizeof(char *)); 
    	char **sorted=(char **)malloc(MAX*sizeof(char *));
    	char*   stop="****";
       	char *str;
       	int flag=0;
    	   int i=0;
    	int cnt=0;
    	do{
    		str=(char *)malloc(N*sizeof(char));//数组储存的是指针 
    		scanf("%s",str);
    		mid[i]=str;
    		fflush(stdin);
    		i++;
    	}while((strcmp(stop,mid[i-1])));
    	//字典排序
    	cnt=i;
    	SortDir(mid,cnt-1,sizeof(char *),charpoin_cmp);
        for(i=0;i<cnt-1;i++){
    		str=(char *)malloc(N*sizeof(char));
    		strcpy(str,mid[i]);
    		sorted[i]=str;
           SortDir(sorted[i],strlen(sorted[i]),sizeof(char),char_cmp);
          }
     	//储存单词
    	while(1){
    		str=(char *)malloc(N*sizeof(char));
    		if(scanf("%s",str)==EOF) break;
    		SortDir(str,strlen(str),sizeof(char),char_cmp);
    		
    		for(i=0;i<cnt-1;i++){
    			if(!strcmp(sorted[i],str)){
    				printf("%s",mid[i]);
    			  flag=1;
    			} 
    		}//for i
    		if(flag == 0){
    				printf(":(");
    		}//if flag
    		flag=0;
    		putchar('
    ');
    	}//while
    	return 0;
    }
    int char_cmp(const void *a,const void *b)
    {
    	return *(char *)a-*(char *)b;
    }
    int charpoin_cmp(const void *a,const void *b)
    {
    	return strcmp(*(char **)a,*(char **)b); 
    }
    void SortDir(void *mid,int num,int size,int cmp(const void *a,const void *b))
    {
    	int i,j;
    	int cnt;
    	int min=0;
    	void *temp=(void *)malloc(size);
    	for(i=0;i<num-1;i++){ 
    		for(min=i,j=i+1;j<num;j++){
    			if(cmp(mid+min*size,mid+j*size)>0)
    				min=j;
    			}
    			memcpy(temp,mid+i*size,size);
    			memcpy(mid+i*size,mid+min*size,size);
    			memcpy(mid+min*size,temp,size);
    		}
    }
    void Prin(char **mid,int n)
    {
    	int i;
    	for(i=0;i<n;i++){
    		puts(mid[i]);
    		putchar('
    ');
    	}
    }
    

  • 相关阅读:
    JQuery
    Ubuntu18.04
    Ubuntu18.04
    Ubuntu18.04
    Ubuntu18.04
    Cordova
    Android
    Android
    Delphi
    postgresql之 drop & delete & truncate
  • 原文地址:https://www.cnblogs.com/pzqu/p/9457665.html
Copyright © 2020-2023  润新知