c - 数组索引之间的交换内存地址可能吗?

标签 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|---*
                       *------*

所以不可能说交换 &array[0] 和 &array[1] 地址之类的东西吗?所以我避免了次要变量?在这种情况下 &array[1] = 10000; &array[0] = 10004。

感谢您的关注,采纳所有建议!

最佳答案

你可以这样做

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

并且不使用第三个变量。

数组是连续的连续内存空间。你不能影响它的订购。它不是 LinkedList,您可以像那样交换指针。

关于c - 数组索引之间的交换内存地址可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13210317/

相关文章:

c - 我怎样才能像这样进行结构类型转换?

c - 打印两个数组中的公共(public)元素

c - sigaction 只处理一次信号

函数中的 C++ const 参数

c - 指针地址如何具有不同的长度?

c++ - C与C++,void **指针的处理

algorithm - 贪心最大流

java - gorilla 和波兰人交汇点算法 - 无法找出完美的解决方案和失败的测试用例

javascript - 提高交错列等距网格上点击检测的性能

pointers - 在结构中初始化字符串指针