求助求助啊~
for里面判断这两种写法怎么结果不一样啊?自行调试绕晕了,还望大神指教下,有详细说明最好。谢谢!!void insertion_sort(int arr[], int len)
{
int i, j;
for(i = 1; i < len; i++)
{
int key = arr;
for(j = i -1; j >= 0 && arr > key; j--) //不同点
{
arr = arr;
}
arr = key;
}
void insertion_sort(int arr[], int len)
{
int i, j;
for(i = 1; i < len; i++)
{
int key = arr;
for(j = i -1; j >= 0 ; j--)
{
if(arr > key) //不同点
arr = arr;
}
arr = key;
}
初始值;进入循环条件;循环变量增值
我以为昨天写的很明白了
for循环括号内有两个分号,分成三部分,第一部分都是初始值 i初始值1 j 初始值是 i-1
第二部分都是进入循环的条件 第一个for条件是i < len 第二个for条件是 j >= 0 && arr > key这一整句话是一个条件,求这句话的真假
第三部分是循环变量增值 i 是一次循环增加1 j是一次循环减少1
你还有什么没明白的再问
要搞清楚这个原因,对for语句熟悉就好了
for(表达式1; 表达式2; 表达式3)
{
}
for中各表达式楼上说的很详细了
for语句执行顺序是怎样的呢?
首先初始化变量(也可以不初始化),表达式2再进行判断,成立进入for语句,不成立结束
如果成立,执行表达式3,再进入第二部判断
了解了这些,我们就可以分析了:第一个是&&,不成立直接结束for语句
第二个是判断j>=0,成立后会有个j--操作,结束条件是j<0时
说白了很简单,在两个程序内层for结束后可以打印j,一目了然 洋洋痒 发表于 2021-3-2 12:48
初始值;进入循环条件;循环变量增值
我以为昨天写的很明白了
for循环括号内有两个分号,分成三部分, ...
你好,我的疑问是把&&后面的条件判断,改成下面用if的方法效果是一样的吗?我执行这个插入排序,下面的if的方法得不到正确的结果。(我感觉跟放在&&后面的方法这执行顺序不是一样吗) 本帖最后由 洋洋痒 于 2021-3-3 02:37 编辑
小老虎007 发表于 2021-3-2 23:18
你好,我的疑问是把&&后面的条件判断,改成下面用if的方法效果是一样的吗?我执行这个插入排序,下面的 ...
是不一样的,在if语句条件判断里,一旦不符合条件了,会立刻终止循环。
但是像你这样操作,即使 arr > key为False你还会进入下一次循环,最终很可能导致某一次循环arr又一次大于key了,既又符合条件了,就会执行arr = arr;从而导致最终结果的错误。这就是区别
具体if语句的条件判断怎么写是要根据实际情况来的,要求什么就怎么写
页:
[1]