admin

变量 find 到底做什么?

sql

这是一个比较参数并按字典顺序对它们进行排序的程序。你能解释一下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);
}

阅读 159

收藏
2021-07-01

共1个答案

admin

这个代码片段

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 循环来检查在此交换后所有参数是否确实已排序)。

2021-07-01