C语言qsort函数、活字印刷、cmd窗口

文章介绍了C语言标准库中的qsort函数用于快速排序的方法,包括不同数据类型的比较函数示例。接着讨论了一个使用深度优先搜索(DFS)解决活字印刷问题的算法,通过排序和剪枝优化搜索过程。最后提到了Windows系统的cmd命令窗口及其环境变量的作用,便于快捷执行程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、qsort函数

qsort函数就是快排,可以不用写那么一长串的代码了qvq,要用到stdlib.h库文件

那么具体用法就是

oid qsort(void* base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));

当然我们还要用一个比较函数来确定快排的升序,也就是cmp

 对于不同的类型,我们有不同的比较方法

int型

int num[100];
int cmp_int(const void* _a , const void* _b)  //参数格式固定
{
    int* a = (int*)_a;    //强制类型转换
    int* b = (int*)_b;
    return *a - *b;  
}

qsort(num,100,sizeof(num[0]),cmp_int); 

char型

char word[100];
int cmp_char(const void* _a , const void* _b)  //参数格式固定
{
    char* a = (char*)_a;    //强制类型转换
    char* b = (char*)_b;
    return *a - *b;  
}

qsort(word,100,sizeof(word[0]),cmp_char); 

字符串

char word[100][10];
int cmp_string(const void* _a , const void* _b)  //参数格式固定
{
    char* a = (char*)_a;  //强制类型转换
    char* b = (char*)_b;
    return strcmp(a,b);
}

qsort(word,100,sizeof(word[0]),cmp_string);

二、活字印刷

思路 

这个题就是用dfs进行搜索,但是要思考的是有些组合要不能重合,所以就需要我们进行剪枝,我们先将数组进行排序,那么这个时候相等的字符就会放在一起,当我们搜索到第二个的相同的字母的时候,我们就会进行判断,将一些相同的组合剪去

代码实现


int cmp(const void *a,const void *b){    //比较
    return *(char*)a-*(char*)b;
}

void dfs(char *tiles,int n,int *dis,int *x)
{
    for(int i=0;i<n;i++)
    {
        if(dis[i]==1)continue;       //已经搜索过的就不用搜索了
        //同一层的递归中,不能出现相同的组合
        if(i>0&&dis[i-1]==0&&tiles[i]==tiles[i-1])continue;   
        (*x)++;
        dis[i]=1;
        dfs(tiles,n,dis,x);
        dis[i]=0;        //回溯
    }
}

int numTilePossibilities(char * tiles){
    int n=(int)strlen(tiles);
    int dis[n];
    memset(dis,0,sizeof(dis));
    int x=0;
    qsort(tiles,n,sizeof(char),cmp);
    dfs(tiles,n,dis,&x);
    return x;
}

三、cmd窗口

cmd窗口相当于计算机的控制窗口吧,它可以利用命令来实现一些操作

进入

win + r 输入cmd

 环境变量

可以将不属于一个磁盘下的文件直接打开,也就是将其记录,记录之后,就算不在同目录下,也能在环境变量中寻找

作用

对于一些常用软件很容易的打开,而不用一个一个输入,显得太过复杂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值