数组索引之间的Exchange内存地址可能吗?

时间:2012-11-03 14:59:52

标签: c algorithm pointers sorting

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

想象一下这个数组它有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|---*
                       *------*

所以不可能说像exchange& array [0]和& array [1]地址这样的东西?所以我避免使用二级变量?在这种情况下& array [1] = 10000;和& array [0] = 10004。

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

1 个答案:

答案 0 :(得分:1)

你可以这样做

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

并且不使用第三个变量。

数组是一个有条件的连续内存空间。你不能放弃它的订购。它不是LinkedList,你只需交换那样的指针。