2

我没有太多管理指针和其他高级功能的经验,但我在想是否有可能制定一种算法来使用指针在数组的两个元素之间交换内存地址,而不是每次都复制和移动值(排序时的示例)。让我解释:

想象一下这个数组它有 10 个未排序的元素,我假装使用冒泡排序对其进行排序(以任何顺序),典型的方法是使用辅助变量来复制元素并在每次找到较小的元素时将其用作旁路或更大的数字(取决于降序或递增排序)。

            *----*----*----*----*----*----*----*----*----*----*
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。

感谢您的关注,所有的建议都是允许的!

4

1 回答 1

1

你可以这样做

 array[0] += array[1];
 array[1] = array[0] - array[1];
 array[0] -= array[1];

并且不使用第三个变量。

数组是一个连续的连续内存空间。您无法取消它的订购。它不是 LinkedList,您只需像这样交换指针。

于 2012-11-03T15:05:33.387 回答