1、不用中间变量,用两种方法交换A和B的值

// 1.中间变量

void swap(int a, int b) {

int temp = a;

a = b;

b = temp;

}

// 2.加法

void swap(int a, int b) {

a = a + b;

b = a - b;

a = a - b;

}

// 3.异或(相同为0,不同为1. 可以理解为不进位加法)

void swap(int a, int b) {

a = a ^ b;

b = a ^ b;

a = a ^ b;

}

2、求最大公约数

/** 1.直接遍历法 */

int maxCommonDivisor(int a, int b) {

int max = 0;

for (int i = 1; i <=b; i++) {

if (a % i == 0 && b % i == 0) {

max = i;

}

}

return max;

}

/** 2.辗转相除法 */

int maxCommonDivisor(int a, int b) {

int r;

while(a % b > 0) {

r = a % b;

a = b;

b = r;

}

return b;

}

// 扩展:最小公倍数 = (a * b)/最大公约数

3、模拟栈操作

栈是一种数据结构,特点:先进后出 -

练习:使用全局变量模拟栈的操作

**#include

include

include **

//保护全局变量:在全局变量前加static后,这个全局变量就只能在本文件中使用

static int data[1024];//栈最多能保存1024个数据

static int count = 0;//目前已经放了多少个数(相当于栈顶位置)

//数据入栈 push

void push(int x){

assert(!full());//防止数组越界

data[count++] = x;

}

//数据出栈 pop

int pop(){

assert(!empty());

return data[--count];

}

//查看栈顶元素 top

int top(){

assert(!empty());

return data[count-1];

}

//查询栈满 full

bool full() {

if(count >= 1024) {

return 1;

}

return 0;

}

//查询栈空 empty

bool empty() {

if(count <= 0) {

return 1;

}

return 0;

}

int main(){

//入栈

for (int i = 1; i <= 10; i++) {

push(i);

}

//出栈

while(!empty()){

printf("%d ", top()); //栈顶元素

pop(); //出栈

}

printf("\n");

return 0;

}

4、排序算法

选择排序、冒泡排序、插入排序三种排序算法可以总结为如下:

都将数组分为已排序部分和未排序部分。

1.选择排序将已排序部分定义在左端,然后选择未排序部分的最小元素和未排序部分的第一个元素交换。

2.冒泡排序将已排序部分定义在右端,在遍历未排序部分的过程执行交换,将最大元素交换到最右端。

3.插入排序将已排序部分定义在左端,将未排序部分元的第一个元素插入到已排序部分合适的位置。

4.1、选择排序

【选择排序】:最值出现在起始端

第1趟:在n个数中找到最小(大)数与第一个数交换位置

第2趟:在剩下n-1个数中找到最小(大)数与第二个数交换位置

重复这样的操作...依次与第三个、第四个...数交换位置

第n-1趟,最终可实现数据的升序(降序)排列。

void selectSort(int *arr, int length) {

for (int i = 0; i < length - 1; i++) { //趟数

for (int j = i + 1; j < length; j++) { //比较次数

if (arr[i] > arr[j]) {

int temp = arr[i];

arr[i] = arr[j];

arr[j] = temp;

}

}

}

}

4.2、冒泡排序

【冒泡排序】:相邻元素两两比较,比较完一趟,最值出现在末尾

第1趟:依次比较相邻的两个数,不断交换(小数放前,大数放后)逐个推进,最值最后出现在第n个元素位置

第2趟:依次比较相邻的两个数,不断交换(小数放前,大数放后)逐个推进,最值最后出现在第n-1个元素位置

…… ……

第n-1趟:依次比较相邻的两个数,不断交换(小数放前,大数放后)逐个推进,最值最后出现在第2个元素位置

void bublleSort(int *arr, int length) {

for(int i = 0; i < length - 1; i++) { //趟数

for(int j = 0; j < length - i - 1; j++) { //比较次数

if(arr[j] > arr[j+1]) {

int temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

}

}

}

}

5、折半查找(二分查找)

折半查找:优化查找时间(不用遍历全部数据)

折半查找的原理:

1> 数组必须是有序的

2> 必须已知min和max(知道范围)

3> 动态计算mid的值,取出mid对应的值进行比较

4> 如果mid对应的值大于要查找的值,那么max要变小为mid-1

5> 如果mid对应的值小于要查找的值,那么min要变大为mid+1

// 已知一个有序数组, 和一个key, 要求从数组中找到key对应的索引位置

int findKey(int *arr, int length, int key) {

int min = 0, max = length - 1, mid;

while (min <= max) {

mid = (min + max) / 2; //计算中间值

if (key > arr[mid]) {

min = mid + 1;

} else if (key < arr[mid]) {

max = mid - 1;

} else {

return mid;

}

}

return -1;

}

热文推荐

ios笔试题算法_iOS 算法面试题(一)相关推荐

  1. prim算法_历时两月,终拿字节跳动offer,算法面试题分享「带答案」

    欢迎关注专栏<Java架构筑基>--专注于Java技术的研究与分享! Java架构筑基​zhuanlan.zhihu.com Java架构筑基--专注于Java技术的研究与分享! 后续文章 ...

  2. 一周刷爆LeetCode,算法da神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记

    一周刷爆LeetCode,算法大神左神(左程云)耗时100天打造算法与数据结构基础到高级全家桶教程,直击BTAJ等一线大厂必问算法面试题真题详解 笔记 教程与代码地址 P1 出圈了!讲课之外我们来聊聊 ...

  3. 微软的100道算法面试题(终结版)

    前言 数据结构与算法的重要性已不言而喻,最近,我整理出十大经典排序算法.五大常用算法总结,今天特意整理出微软面试的100题,若有不足之处,欢迎指正!由于篇幅过长,前30道题目写在上一篇,大家可以进我的 ...

  4. 数据结构经典算法面试题

    转自:http://hi.baidu.com/geogre_jsj/blog/item/e4b98fd2aab5aa3611df9b92.html 由于这些题,实在太火了.所以,应广大网友建议要求,在 ...

  5. 记一道超级简单的 Java 算法面试题,但无人通过

    点击上方蓝字设为星标 下面开始今天的学习- 作者:方志宏(已获作者授权转载,禁止二次转载) 来源:https://zhuanlan.zhihu.com/p/57859872 这可能是历史上最简单的一道 ...

  6. 数据结构与算法面试题(2022版)

    序列号 内容 链接 1 Java基础知识面试题(2022版) https://blog.csdn.net/qq_43061290/article/details/124023797 2 Java集合容 ...

  7. 经典算法面试题及答案

    经典算法面试题及答案  1. 时针分针重合几次 表面上有60个小格,每小格代表一分钟, 时针每分钟走1/12小格,分针每分钟走1小格,从第一次重合到第二次重合分针比时针多走一圈即60小格,所以 60/ ...

  8. 200 道算法面试题集锦!Python 实现,含华为、BAT 等校招真题!

    点击上方"AI有道",选择"置顶"公众号 重磅干货,第一时间送达 春招临近,无论是要找工作的准毕业生,还是身在职场想要提升自己的程序员,提升自己的算法内功心法. ...

  9. twitter java_Twitter算法面试题详解(Java实现)

    最近在网上看到一道Twitter的算法面试题,网上已经有人给出了答案,不过可能有些人没太看明白(我也未验证是否正确),现在给出一个比较好理解的答案.先看一下题目. 图1 先看看图图1.可以将方块看做砖 ...

最新文章

  1. R语言使用lm函数拟合多元线性回归模型、假定预测变量没有交互作用(Multiple linear regression)
  2. AWARD BIOS设置详解
  3. ubuntu 运行c++_06_Linux下VSCode简单编程(远程开发WSL_Ubuntu_18.04) | C语言入门
  4. .Net开发笔记(十九) 创建一个可以可视化设计的对象
  5. 最新知识图谱论文清单,就算看不懂也会忍不住收藏
  6. 公钥、私钥、数字证书的概念 (讲得很明吧,通俗易懂)
  7. pycharm的项目文件中包括什么_一个完整的项目管理流程包括什么?
  8. java 并发原子性与易变性 来自thinking in java4 21.3.3
  9. android recover 系统代码分析 -- 选择进入
  10. php mysql异常捕获_PHP中try{}catch{}的用法及异常处理.对数据库的事物支持
  11. 21天学通c语言pdf百度云,21天学通C语言「pdf+epub+mobi+txt+azw3」
  12. 网络调试助手无法连接tcp服务器,W5500 TCP 客户端网络调试助手连不上
  13. 自己用GO语言编写的AliDDNS动态域名更新服务,routeros
  14. 域控服务器的ip地址,修改Active Directory域控制器IP地址
  15. Matlab神经网络(一)
  16. python网络爬虫-淘宝商品比价定向爬虫
  17. 【论文阅读笔记】Structured-light 3D surface imaging: a tutorial(结构光三维表面成像)
  18. matlab+GMT 画图操作——在画图区域-R外进行图例文字标注
  19. 聆思CSK6视觉AI开发套件使用——AI手势识别+头肩识别+编译helloworld
  20. vue首次加载生命周期

热门文章

  1. (转)对《javascript 杂谈之哪种写法你更喜欢?》最后一种“匿名函数法”的解释...
  2. 《移山之道-VSTS软件开发指南》---读书笔记
  3. fibonacci数列前20项_数学第十七课:数列综合应用第一弹
  4. 设计灵感|单色配色,如何让海报更出彩?
  5. 老板催你交圣诞海报设计?PSD源文件素材,直接编辑
  6. 年终庆典高端海报设计PSD分层模板
  7. 霓虹促销电商设计,购买欲冲击视觉
  8. bytebuf池_PooledByteBuf内存池-------这个我现在不太懂
  9. pcs7 simatic batch v9.0_西门子V90 伺服STO安全功能注意事项
  10. 并行、并发和代码性能优化