gpt4 book ai didi

c++ - 这条语句 "while(a[i]--!=0)"是做什么的?

转载 作者:行者123 更新时间:2023-11-28 03:14:20 25 4
gpt4 key购买 nike

下面是用于按非递减顺序对数字进行排序的代码:

#include<stdio.h>
#include<stdlib.h>
# define size 1000001
static int a[size];
int main()
{
int t, k, i;
scanf("%d", &t);
for(i = 0; i < t; i++)
{
scanf("%d", &k);
a[k] += 1;
}
for(i = 0; i < 1000001; i++)
{
while(a[i]-- != 0)
printf("%d\n", i);
}
return 0;
}

如果有人能向我解释代码,那将是非常有帮助的。我已经浏览了代码,但不知道它如何对数字进行排序。没有在任何地方进行交换,但它仍然可以在 C++ 编辑器中工作。

最佳答案

这个程序不会在数学意义上对数字进行排序,但这并不重要,因为它会给您一种正在这样做的错觉。

程序要求输入 t,最好将其命名为 numberOfValues...您将输入的值的数量。

数组 a[size] 可以被认为是 size 个值桶。在您的程序中,这些 buckets 只是计数器。每个桶都有一个数字,从 0 到大小。当输入值 5 时,桶 a[5] 的计数增加。这一直持续到所有桶都设置完毕。

程序然后通过桶工作。您的大部分存储桶都是空的,但是当存储桶不为零时(while a[i] != 0 -- 暂时忽略丢失的 --),桶需要“清空”,同时需要考虑其内容。桶 a[i] 包含 i 元素的计数,因此循环打印出 i 的值在排序中是下一个,而同时递减计数 (a[i]--)。这一直持续到桶为空(== 0)并且程序移动到下一个桶。

最终你所有的桶都被清空,排序完成。

关于c++ - 这条语句 "while(a[i]--!=0)"是做什么的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17423852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com