算法
Junior Chestnut
这个作者很懒,什么都没留下…
展开
-
C语言-快速排序
#include <iostream> using namespace std; // 1. 找基准, 双指针 // 2. 从右侧开始 // 3. 大于基准的放在右边,小于放左侧 // 4. 交换原数组基准处的值 和 arr[i] --循环结束 i==j // 5. 递归处理 左侧和右侧 // 6. 写递归的基础条件,递归如何退出? void Swap(int* a, int* b) { int tmp = *a; *a = *b; *b = tmp; } void AQuickS原创 2021-09-12 14:34:04 · 82 阅读 · 0 评论 -
C语言-插入排序
#pragma once #include <iostream> void Swap(int*a, int* b) { int tmp = *a; *a = *b; *b = tmp; } // 主要是j 和 j - 1 同步变化, 遇到大的直接 break; void insertSort(int arr[], int N) { for (int i = 1; i < N; i++) { for (int j = i; j > 0;) // i来了就代表j有了最大原创 2021-09-11 12:16:17 · 91 阅读 · 0 评论 -
堆排序(升序)
【注】: 此处没有设置哨兵 #pragma once #include <iostream> #include <vector> using namespace std; // 堆排序步骤: /* 1. 把数组表示成完全二叉树......画出图(草纸上) 2. 把完全二叉树调成最大堆或者最小堆 3. 取根节点和最后一个叶节点 交换,删除根节点,重新调整为最大堆或者最小堆 */ // 代码关键 /* 1. 调整堆,从最后一个非叶节点开始: 下标为: 数组长度/2 -1 2原创 2021-09-10 12:00:55 · 685 阅读 · 0 评论 -
单链表逆转
2.原创 2021-08-04 19:30:20 · 111 阅读 · 0 评论 -
动态规划与循环
1. 动态规划的内涵 动态规划中当前的状态往往依赖于前一阶段的状态和前一阶段的决策结果。 例如我们知道了第i个阶段的状态Si以及决策Ui,那么第i+1阶段的状态Si+1也就确定了。 所以解决动态规划问题的关键就是确定状态转移方程,一旦状态转移方程确定了, 那么我们就可以根据方程式进行编码。 2. 状态转移方程----动态规划的内核 3. 经典使用动态规划的模型总结 ... waiting ...原创 2021-06-16 22:46:34 · 477 阅读 · 0 评论 -
大话数据结构1-高斯求和
天才,让人惊叹。 一、 普通人 size_t int sum = 0; for i = 1; i< 10; i++ { sum = sum + i; } 二、高斯 int n = 10; int sum = 0; sum = (n + 1) * n / 2;原创 2021-06-02 10:16:26 · 147 阅读 · 0 评论 -
C/C++二分法查找
上图为二分法查找的导图:即, 1.0 用array[mid] 与需要查找的值比较,根据结果更新right或者left; 2.0 注意arr[mid]处已经比较,right或者left = mid +1 或者减1; 3.0 注意,这里使用的都是int, 你输入77.7,Fnumber 会被转化为77,继而输出“找到了77”. int arr[7] = { 1,6,9,77,88,601,800 }; int left = 0; int right = 6; int mid = 0; cout <.原创 2021-04-13 10:46:01 · 223 阅读 · 0 评论 -
查找
文章预览:原创 2021-04-16 18:04:05 · 102 阅读 · 0 评论 -
排序
CSDN目录问题: @TOC 一、冒泡排序 【注】这里是从小到大排列,改变if条件可改变顺序。 冒泡排序算法的原理如下: 1.0 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.0 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。 在这一点,最后的元素应该会是最大的数。 3.0 针对所有的元素重复以上的步骤,除了最后一个。 4.0 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 //冒泡排序--输入数组 void BubbleSort(int a原创 2021-04-16 17:50:19 · 94 阅读 · 0 评论