~风介~ 发表于 2016-6-1 12:19:06

求答疑:插入排序

如题,为什么加了注释的和没加的会有差别?!Windows下没有称手的调试工具,求请教!
#include <stdio.h>

int arr,n;

void insert_sort(int len)
{
        int i, j, t;
       
        for (i=1; i<len; i++)
        {
                t = arr;
//                for (j=i-1; j>=0&&arr>t; j--)
                for (j=i-1; j>=0&&arr>arr; j--)
                {
                        arr = arr;
                }
//                arr = t;
                arr = arr;
        }
}

int main()
{
        int i, j;
       
        scanf("%d", &n);
        for (i=0; i<n; i++)
                scanf("%d", &arr);
       
        insert_sort(n);
       
        //print
        for (i=0; i<n; i++)
                printf("%d ", arr);
               
        getchar(); getchar();
       
        return 0;
}

C++编程小组

n0noper 发表于 2016-6-1 12:19:07

~风介~ 发表于 2016-6-1 14:17
虽然j是由i赋初始值的,但是j变化对i没什么影响吧。


是的呀,j 对 i 没影响。

但是arr 会对 arr 有影响。因为 j 的变化范围与 i 的值有交集。

for循环第一步,j = i - 1;
arr 这个不就是 arr 吗?

n0noper 发表于 2016-6-1 13:08:49


1. 如果使用t,那它肯定忠心耿耿,不会改变。

2. 如果使用arr,毕竟 j 从 i-1 开始,而 arr 也就有机会挖墙脚,arr 被修改了,结果也就错了。

~风介~ 发表于 2016-6-1 14:17:19

n0noper 发表于 2016-6-1 13:08
1. 如果使用t,那它肯定忠心耿耿,不会改变。

2. 如果使用arr,毕竟 j 从 i-1 开始,而 arr 也就 ...

虽然j是由i赋初始值的,但是j变化对i没什么影响吧。

Looker 发表于 2016-6-1 21:09:17

//看我的图蓝色那行(被框起来的)
/*我原本输入的测试数据是 1,4,7,0,-5
执行第三次循环时(就是图中那次循环)看左边变量窗口
arr 变成了 1,4,7,7,-5
这是正常的变化
但下一步本应该将原本的key (数据中的0)赋值给arr
但很明显,如果使用arr = arr就会出错!
因为此时 i = 3 (看左边变量窗口)
即你将原本应执行的 0 -> 7 ,变成了 7 -> 7 故错在这一步
-------------小分割-----------------
原因我想你应该知道了
就是for循环中的赋值改变了本应该保存起来的‘插入元素’
即此刻的 a 已非当年 的 a
*/

Looker 发表于 2016-6-1 21:12:16

{:10_260:}什么 居然已经解决了

xls6688 发表于 2016-6-1 21:52:54

看看{:5_92:}

DAY 发表于 2016-6-1 22:57:58

插入排序。。。。

~风介~ 发表于 2016-6-2 20:46:43

Looker 发表于 2016-6-1 21:09
//看我的图蓝色那行(被框起来的)
/*我原本输入的测试数据是 1,4,7,0,-5
执行第三次循环时(就 ...

我的Dev-C++一调出debug就崩溃!{:10_269:}

Looker 发表于 2016-6-2 22:56:26

~风介~ 发表于 2016-6-2 20:46
我的Dev-C++一调出debug就崩溃!

本来想把安装包发给你的,附件不能超过1m。。。
可以去官网重新下载一个
https://sourceforge.net/projects/dev-cpp/

~风介~ 发表于 2016-6-3 01:17:43

Looker 发表于 2016-6-2 22:56
本来想把安装包发给你的,附件不能超过1m。。。
可以去官网重新下载一个
https://sourceforge.net/proj ...

谢了!:)

wanniba 发表于 2016-6-9 14:05:54

~风介~ 发表于 2016-6-2 20:46
我的Dev-C++一调出debug就崩溃!

我也是诶,不知道为什么{:5_107:}
页: [1]
查看完整版本: 求答疑:插入排序