变量 find 到底在做什么?

What The variable find exactly is doing here?

这是一个比较参数并按字典顺序对它们进行排序的程序。您能否解释一下 find 在那里做了什么以及它如何影响代码?我在很多代码中看到了这种模型;它的值暂时在1和0之间变化,所以请你澄清一下。

int main(int argc, char **argv)
{
    char *tmp;
    int find;
    int i;

    find = 1;
    while (find)
    {
        find = 0;
        i = 0;
        while (++i < argc - 1)
        {
            if (strcmp(argv[i], argv[i + 1]) > 0)
            {
                tmp = argv[i];
                argv[i] = argv[i + 1];
                argv[i + 1] = tmp;
                find = 1;
            }
        }
    }
    i = 0;
    while (++i < argc)
        printf("%s\n", argv[i]);
    return (0);
}

这段代码

find = 1;
while (find)
{
    find = 0;
    i = 0;
    while (++i < argc - 1)
    {
        if (strcmp(argv[i], argv[i + 1]) > 0)
        {
            tmp = argv[i];
            argv[i] = argv[i + 1];
            argv[i + 1] = tmp;
            find = 1;
        }
    }
}

实现冒泡排序算法。

最初,假设命令行参数未按字符串排序。

find = 1;

然后在 while 循环中,标志 find 被重置为 0。

    find = 0;

如果在内部 while 循环中

while (++i < argc - 1)
{
        if (strcmp(argv[i], argv[i + 1]) > 0)
        {
            tmp = argv[i];
            argv[i] = argv[i + 1];
            argv[i + 1] = tmp;
            find = 1;
        }
}

找到一个大于下一个参数(字符串)的参数(字符串)

        if (strcmp(argv[i], argv[i + 1]) > 0)

然后交换相邻的参数并且标志 find 设置为 1 表示参数数组尚未排序(我们至少需要再迭代一次外部 while循环检查所有参数是否确实在交换后排序)。