`
tuhaitao
  • 浏览: 375457 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

reverse数组算法

阅读更多

根据不使用中间变量交换两个变量值算法可进一步扩展到数组中:

 

 

#include <stdio.h>

void change(int* a, int* b) {
    *b = *a ^ *b;
    *a = *a ^ *b;
    *b = *a ^ *b;
}

// a[] 为数组
// cnt为数组长度
void reverse_array(int a[], int cnt) {
    int first, last;
    for(first = 0, last = cnt -1; first < last; first++, last--) {
        change(&a[first], &a[last]);
    }
}

void print_array(int a[], int cnt) {
    int i;
    for(i = 0; i < cnt; i++) {
        printf("a[%d]=%d\n", i, a[i]);
    }
}

int main() {
    int array[5] = {1, 2, 3, 4, 5};
    print_array(array, 5);
    reverse_array(array, 5);
    printf("\n");
    print_array(array, 5);
}

 

 

这里需要注意一点,change函数在作交换时,不能对自身做, 比如:

 

 

int x = 3;

change(&x, &x);

printf("x=%d\n", x);
 

 

这将导致x结果为0, 原因在于change函数改变了引用地址中的值:

 

 *b = *a ^ *b;

// 此时如果*a==*b, 那么根据波尔规则,a^a=0 , *b的值被设置为0,

//又因为a于b指向同一块内存,赋值后*a也被设置为0

 *a = *a ^ *b;

// 接着*a = 0 ^ 0 , 那么*a还是0

 *b = *a ^ *b;

// 最后 *b = 0 ^ 0 , 结果自然变为0

 

 

分享到:
评论

相关推荐

    数据结构 线性表 实验代码 C++ 数组

    数据结构 线性表 实验代码 C++ 数组 hust 赵明

    数据结构习题解答 邓俊辉

    非常清晰,非扫描。是数据结构教材的配套用书。内容很棒用c++实现,是学习数据结构的必备书籍。

    cpp-算法精粹

    数组 Remove Duplicates from Sorted Array Remove Duplicates from Sorted Array II Longest Consecutive Sequence Two Sum 3Sum 3Sum Closest 4Sum Remove Element Move Zeroes Next Permutation Permutation ...

    leetcode二维数组搜索-leetcode:C中一些算法问题的解决

    和其他算法问题 文件描述 2_add_two_numbers.c : 两个数相加 3_solution.c : 无重复字符的最长子串 space_urlencode.c : 在 O(n) space_urlencode.c空间更改为“ ” ./two_dimension_binary_search.c : 二维排序数组...

    C语言实现数组的循环移位的方法示例

    Reverse Array (数组翻转) code void reverse(int array[], int left, int right) { int l, r; for (l = left, r = right; l &lt; r; l++, r--) { array[l] = array[l] ^ array[r]; array[r] = array[l] ^ ...

    w3c编程挑战_初级脚本算法实战篇

    先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。 function reverseString(str) { var str2 = ''; for(var i=str.length-1;i&gt;=0;i--){ str2 += str[i]; } return str2; ...

    leetcode三角形打印-DataStructuresInJava:用Java实现各种数据结构和算法

    front、insert(i)、remove(i)、reverse、removeValue 使用带有尾指针的单向链表的队列实现。 二分搜索(不是真正的数据结构,但我猜还可以) 迭代和递归 二叉搜索树 第一次使用泛型! 哈希表 添加,获取,删除,散列...

    javascript入门笔记

    Javascript Basic 1、Javascript 概述(了解) Javascript,简称为 JS,是一款能够运行在 JS解释器/引擎 中的脚本语言 JS解释器/引擎 是JS的运行环境: 1、独立安装的JS解释器 - NodeJS 2、嵌入在浏览器中的JS...

    leetcode备忘录系统-Algorithms-DataStructures:算法-数据结构

    将有序数组转换为二叉搜索树 面向对象编程术语 - Abstraction - Inheritance - Cohesion - Coupling 集合和数学 API - Maps - Lists - Concurrency 二分查找 图遍历算法 - BFS - DFS - Shortest path algorithm like...

    leetcode下载-algorithm_practise:算法实践

    LRU算法 基于访问时间的链表 或者 基于插入时间的链表 哈希表: leetcode: 1. two sum, 219. contains duplicate(滑动窗口), 454. 4sum 数组 leetcode: 基本排序算法 插入, 归并 -&gt; 递归 和 迭代 快排 -&gt; 随机 三路 ...

    JavaScript学习笔记之数组随机排序

    JavaScript中提供了sort()和reverse()方法对数组项重新排序。但很多时候这两个方法无法满足我们实际业务的需求,比如说扑克牌游戏中的随机洗牌。 在这篇文章一起来学习如何完成上面这个示例的效果,以及一些有关于...

    C++ STL开发技术导引(第5章)

    4.4.3 算法(Algorithm) 53 4.4.4 函数对象(Function Object) 54 4.4.5 适配器(Adapter) 55 4.4.6 内存分配器(Allocator) 56 4.4.7 概念(Concept)和模型(Model) 56 4.5 C++ STL存在的一些问题 57 4.6 本...

    toy-problems:Javascript算法实践

    在继续练习JavaScript的过程中,我将更新此存储库以托管常见问题的方法。 问题集可能是来自潜在采访或数据结构和... 此方法无需使用“ .reverse()”方法即可反转数组的项目。 它是通过从背面取出每个项目,然后将其推

    javascript-algorithms:用Javascript实现的基本算法,即回文,反向数组,二进制搜索,冒泡排序,斐波那契等

    Javascript中的算法 用Javascript实现的基本算法 嘶嘶声 无害赎金票据 回文 凯撒密码 逆词 反向阵列就位 两次总和 快速排序 二元搜寻 斐波那契 阶乘 气泡排序

    leetcode卡-data-structure-algorithm:数据结构与算法练习与整理

    Array.prototype.reverse Array.prototype.join 思维方法: 要熟悉所有API,知道在某些场景的实际应用 数组 电话号码的组合(公式运算) 卡牌分组(归类运算) 种花问题(筛选运算) 格雷编码(二进制运算) 排序 ...

    DSA:解决一些基本数据结构和算法问题

    解决一些基本数据结构和算法问题(C ++)及其时间复杂性 reverse.cpp-反转给定数组的程序-O(n) minimax.cpp-使用最少的比较次数找出数组中最大和最小元素的程序-O(n) kthmaxmin.cpp-在给定数组中打印第K个...

    java安卓辅助源码-Android-Reverse-learn:安卓逆向学习

    java安卓辅助源码 安卓逆向 01 frida高级逆向 frida hook Java frida hook native frida辅助分析ollvm字符串加密 ...C程序逆向:函数、结构体、数组、位操作 C++类、构造/析构函数、虚函数、虚表 C++继承、重载

    leetcode伪代码-data-structures-and-algorithms:数据结构与算法

    创建数组类:insert()、removeAt()、indexOf()、print()、max()、reverse()、insertAt()。 链表 具有所需方法的基本单链表实现。 一次性反转单链表。 一次性从单向链表的最后一个中找到第 K 个节点。 一次找到单向...

    局部搜索源代码

    运用局部搜索算法求解SAT问题 int **arr; //描述SAT问题的二维数组 int Var_Num; //变元个数 int Clause_Num; //子句个数 ifstream fin; ofstream fout; void Random(int *v, int *s); int Proper_Num(int *s); ...

    Algorithm-Concepts:此存储库包含计算机科学领域中使用的一些核心算法和数据结构的代码

    算法概念和算法课程。4.1 数组。 1. Find a pair in an array of size 'n', whose sum is X2. Find a majority element in an array of size 'n'3. Find the number occuring odd number of times in a given array ...

Global site tag (gtag.js) - Google Analytics