sal*_*000 2 c insertion-sort do-while
我只是在C中进行插入排序的教程,我很难理解它的方式!运算符用作do while循环的条件.
条件只是while (!done)
但我不明白它是如何知道什么不应该等于变量完成.喜欢的东西while (done==0)
会让我更有意义.
我只是开始编码,如果答案非常明显,那就很抱歉!我试过谷歌搜索但我发现很难表达问题...
代码如下:
void insertionSortArray (int arr[])
{
for(int i = 1; i < SIZE; i++)
{
int value = arr[i];
int j = i -1;
int done = 0;
do
{
if (arr[j]>value)
{
arr [j+1] = arr[j];
j - -;
if (j<0)
done = 1;
}
else
done = 1;
} while (!done);
arr [j+1] = value;
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢!!
他们完全是一回事.!done
并且done == 0
可以互换.关于C的事情是:它很长一段时间没有"真正的"布尔类型.布尔人只在C99中引入.
所有零值都被视为false,其他值为true.这就是为什么!done
是真的,只要done == 0
(done
是0 - >假,!false
- > true
).一如既往地!
是逻辑NOT运算符,并且做它的作用:否定后来发生的任何事情.因此done = 0
=> done
是假的,!done
- >与假相反,是真的.
如果你发现done == 0
更容易阅读,那么一定要这样写.虽然,更常见的是看到较短的版本.
非常常见的错误/真实检查:
type *foo = malloc(123 * sizeof *foo);
if (!foo)
exit(1); // failed to alloc memory
void my_function(int *ptr, size_t size)
{
if (!ptr)
return; // a NULL pointer was passed
// ...
}
Run Code Online (Sandbox Code Playgroud)
因为这两个语句都是可以互换的,所以写下你认为最有意义的语句.也许大声朗读这两个陈述(虽然看起来很愚蠢)会让你改变主意:
while done equals zero
//vs
while not done
Run Code Online (Sandbox Code Playgroud)
现在两个句子中哪一个最有意义?