【发布时间】:2012-10-24 00:03:45
【问题描述】:
我没有太多管理指针和其他高级功能的经验,但我在想是否有可能制定一种算法来使用指针在数组的两个元素之间交换内存地址,而不是复制和移动值每次(排序时的示例)。让我解释一下:
想象一下这个数组有 10 个未排序的元素,我假装使用冒泡排序对其进行排序(以任何顺序),典型的方法是使用辅助变量来复制元素并在每次 i 时将其用作旁路找到一个更小或更大的数字(取决于降序或升序)。
*----*----*----*----*----*----*----*----*----*----*
array[10] = | 45 | 21 | 32 | 48 | 32 | 22 | 47 | 10 | 11 | 12 |
*----*----*----*----*----*----*----*----*----*----*
^----- Imagine this is 10000
程序意识到数组[1]小于数组[0],因此冒泡排序将使用辅助变量作为旁路交换它们的值(这是典型的方式)。
*--------------*
| ^
| |
*--------------*--------------*----*----*----*----*----*----*
array[10] = | 45 | 21 | 32 | 22 | 47 | 10 | 11 | 12 |
*--------------*--------------*----*----*----*----*----*----*
| ^
| *------* |
*-->|BYPASS|---*
*------*
所以不能说交换 &array[0] 和 &array[1] 地址之类的东西吗?所以我避免了次要变量?在这种情况下 &array[1] = 10000; &array[0] = 10004.
感谢您的关注,所有建议都可以接受!
【问题讨论】:
-
不,这是数组的一种点,索引以简单的方式对应于地址。但是为什么要避免使用 temp 变量呢?如果要排序的东西很大,无论如何都应该对指针进行排序。
-
如果你能以某种方式改变某物的地址(而不是将其复制到新的地方,而是改变地址——不管这意味着什么),世界将不再有意义.不过头像不错。
标签: c algorithm pointers sorting