gpt4 book ai didi

c - 排序程序查询

转载 作者:行者123 更新时间:2023-11-30 20:19:10 25 4
gpt4 key购买 nike

我在quora中遇到了一段排序代码,我对其中的一些代码行感到非常困惑,如果有人向我解释一下,那将会有很大的帮助。
代码如下:

#include <stdio.h>

int array[1000001] = {0};

int main(){
int i,j;
scanf("%d",&j);
int x;

for (i=0;i<j;i++){
scanf("%d",&x);
array[x]++;
}

for (i=0;i<1000001;i++){
while(array[i]>0){
printf("%dn",i);
array[i]--;
}
}
return 0;
}

有人可以解释一下发生了什么

for(i=0;i<j;i++)
{
scanf("%d",&x);
array[x]++;
}

这里

for (i=0;i<1000001;i++)
{
while(array[i]>0)
{
printf("%dn",i);
array[i]--;
}
}

这个 dn 代表什么?

最佳答案

这是迄今为止最好的理由,不要在不了解 Quora 或其他来源的行为的情况下复制任何内容。

无论如何,它都不能确保任何输入是否正确。

for(i=0;i<j;i++)
{
scanf("%d",&x);
// Are you sure that 'x' is always a valid int value and is less than your array size?
// No, if a monkey enters 200000 here, kabooom!
array[x]++;
}

在此 for 循环中,将迭代 j 次,采用 int 类型的输入,并且该索引处的值将递增,通过将该索引标记为 1 来了解输入的值。

for (i=0;i<1000001;i++)
{
while(array[i] > 0)
{
printf("%dn",i);
array[i]--;
}
}

它的设计很糟糕,因为如果我只输入 3 个数字进行排序,它仍然会迭代 1000001 次。但是,它适用于预期/有意限制的输入值。

例如,假设用户输入了 6 个值:427068因此,j = 6,并且 array 的内容除第 4、2、7、0、6 和 8 个索引外均为零。

现在,这个 while 循环执行一项工作:它检查是否设置了第 i 个索引,即该索引是否由用户输入。因此 while 循环中的代码只会针对第 4、2、7、0、6 和 8 个索引执行。为了解释如何打印该值,让我们试运行代码,最初 i0

// Is ith index 1?
while (array[i] > 0) // i is 0
{
// Yes it is,
printf("%d ", i);
// See above, Prints 0 - not 1!
// Printing 'i' is the trick, instead of printing array[i]..
array[i]--; // Note, makes it zero!
}

对于下一次迭代,i1

// Is ith index 1? - No, so move on to next index
while (array[i] > 0) // i is 1
{
//
}

假设迭代已达到第 7 个索引,

// Is ith index 1?
while (array[i] > 0) // i is 7
{
// Yes it is,
printf("%d ", i);
// See above, Printing 'i' is the trick,
// instead of printing array[i]..
array[i]--; // Note, makes it zero!
}

毫无疑问,这将对数字进行排序,但有一些预定义的约束。此外,您可以/应该添加一些实现来获取数组中的排序值,具体取决于您是否需要这样做。

最后,"%dn" 不是格式说明符。它可能应该是“%d\n”。如果保持原样不变,它将在打印的每个数字后附加 n 作为字符,毫无意义。

关于c - 排序程序查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51360302/

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