求答疑:插入排序
如题,为什么加了注释的和没加的会有差别?!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);
for (i=0; i<n; i++)
printf("%d ", arr);
getchar(); getchar();
return 0;
}
C++编程小组 ~风介~ 发表于 2016-6-1 14:17
虽然j是由i赋初始值的,但是j变化对i没什么影响吧。
是的呀,j 对 i 没影响。
但是arr 会对 arr 有影响。因为 j 的变化范围与 i 的值有交集。
for循环第一步,j = i - 1;
arr 这个不就是 arr 吗?
1. 如果使用t,那它肯定忠心耿耿,不会改变。
2. 如果使用arr,毕竟 j 从 i-1 开始,而 arr 也就有机会挖墙脚,arr 被修改了,结果也就错了。
n0noper 发表于 2016-6-1 13:08
1. 如果使用t,那它肯定忠心耿耿,不会改变。
2. 如果使用arr,毕竟 j 从 i-1 开始,而 arr 也就 ...
虽然j是由i赋初始值的,但是j变化对i没什么影响吧。 //看我的图蓝色那行(被框起来的)
/*我原本输入的测试数据是 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
*/
{:10_260:}什么 居然已经解决了 看看{:5_92:} 插入排序。。。。 Looker 发表于 2016-6-1 21:09
//看我的图蓝色那行(被框起来的)
/*我原本输入的测试数据是 1,4,7,0,-5
执行第三次循环时(就 ...
我的Dev-C++一调出debug就崩溃!{:10_269:} ~风介~ 发表于 2016-6-2 20:46
我的Dev-C++一调出debug就崩溃!
本来想把安装包发给你的,附件不能超过1m。。。
可以去官网重新下载一个
https://sourceforge.net/projects/dev-cpp/ Looker 发表于 2016-6-2 22:56
本来想把安装包发给你的,附件不能超过1m。。。
可以去官网重新下载一个
https://sourceforge.net/proj ...
谢了!:) ~风介~ 发表于 2016-6-2 20:46
我的Dev-C++一调出debug就崩溃!
我也是诶,不知道为什么{:5_107:}
页:
[1]