无类型数据排序实现

简介: 无类型数据排序实现

/*

字典搜索

问题描述:

给定一个字典,有若干个单词,每个单词不超过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('\n');
  }//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('\n');
  }
}


相关文章
|
4天前
根据二维数组中的某个字段进行排序
根据二维数组中的某个字段进行排序
13 0
|
11月前
sort()排序以及多个属性数组对象排序(按条件排序)
sort()排序以及多个属性数组对象排序(按条件排序)
62 0
|
11月前
|
SQL 数据库
对查询结果进行排序
对查询结果进行排序
67 0
|
PHP
PHP数组排序 解决数值型版本号排序错乱
PHP数组排序 解决数值型版本号排序错乱
104 0
|
算法 Java
关于排序速度效率数组集合选择那点事
今天在codeforces上写一个排序题。我一直用java写的算法。后来我用了普通的数组排序,tl了。。直接蒙蔽。后来想用c 看看效果,,把我的java代码克隆成c 。
67 0
关于排序速度效率数组集合选择那点事
|
小程序 JavaScript API
小程序实现索引列表排序
小程序实现索引列表排序
356 0