算法Studying
C++算法
1 高精度
- 使用字符型转整数数组实现防止long或者int这种数据类型的位数限制导致的精度丢失。
1.1 高精度加法
- 基本逻辑实现原理
1 |
|
1.2 高精度减法
- 退位 + 负数
1 |
|
1.3 高精度乘法
- 进位累加
1 |
|
1.4 高精度除法
1.4.1 高精度除低精度
- 按位取余
1 |
|
1.4.2 高精度除高精度
- 利用减法,来做,除数-X个被减数补位后 记录X就是答案
1 |
|
总结
- 高精度运算其实就是按照字符串到数组的逻辑,按位次求出。四种运算逻辑略有不同,万变不离其宗。
高精度四种运算总和
1 |
|
2 排序
2.1 冒泡排序
- 冒泡原理就是沉底,是每轮排序将最大的值放到最后面
- 遍历数组,从小到大,如果遇到后面的数比该数小,交换位置,这样每次可以将一个最大值放到最后。
- 因为已经放了一个排好的最大值在最后了,所以第二次遍历的时候,就可以少遍历一位
代码如下:
1 | void bubbleSort(int a[], int len) { |
2.2 选择排序
- 选择排序我看来是优化版的冒泡排序,选择排序解决了冒泡每轮都要交换顺序的过程
- 找出一个最大值或者最小值,直接交换。再往后找
1 | void selectSort(int a[],int len) { |
2.3 计数排序
- 计数排序主要是用到了数组的下标 比如9出现在一次就在下标9的位置++。
- 最后按小到大输出即可。
1 | //计数排序 |
2.4 桶排序
数据结构
栈(Stack)
1、顺序栈的定义
- 堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈遵循“后进先出”(Last In First Out,LIFO)的原则,即最后一个被放入栈中的元素总是第一个被取出。
- 先进入栈的元素在底部,接着进去的在底部上面一个位置,出栈的时候从栈顶取。类似于自动步枪的弹夹,最先进入弹匣的,是最后射出的。
2、栈的特点
- 栈(stack)是后进先出(last-in-first-out,LIFO)或先进后出(FILO)的
- 栈有三个基础操作压入(push),弹出(pop),取数(getTop)操作都为 O(1)时间
- 栈有一个计数器 counter 或栈顶指针
3、栈的基本操作
-
建栈(init):在使用栈之前,首先需要建立一个空栈,称建栈;
-
压栈(push):往栈顶加入一个新元素,称进栈(压栈);
-
出栈(pop):删除栈顶元素,称出栈(退栈、弹出);
-
取栈顶(gettop):查看当前的栈顶元素,称读栈;
-
测试栈(empty)在使用栈的过程中,还要不断测试栈是否为空或已满,称为测试 栈;
-
显示栈(display):输出栈的所有元素;
-
释放栈(setnull):清空栈;
4、栈的操作代码
初始化、入栈、出栈、显示栈!
1 |
|
评论