![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
算法合集
moonbaby1
记录学习
展开
-
快速排序、归并排序
思想: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。 挖坑填数进行总结: 1.i =L; j = R; 将基准数挖出形成第一个坑a[i]。 2.j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。 3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。 4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。 实现代码 #incl原创 2020-08-25 20:31:00 · 139 阅读 · 0 评论 -
二分查找
一.非递归 int binarySearch(int arr[],int n){ int l=0,r=n-1; while(l<=r){ int mid=(l+r)/2; if(arr[mid]==target) return mid; if(target>arr[mid]) l=mid+1; else r=mid-1; }原创 2020-07-06 21:10:41 · 92 阅读 · 0 评论 -
二叉树的广度优先遍历(BFS)与深度优先遍历(DFS)
二叉树的结构定义 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } };*/ 一.二叉树的广度优先遍历 广度优先排序(宽度优先排序或者横向优先搜索)是从根结点开始沿着树的宽度搜索遍历。按层次的去遍历。依次遍历根节点,然后是左孩子和右孩子。 从上到下,从左到右依次打印出..原创 2020-06-01 11:44:27 · 1064 阅读 · 0 评论 -
荷兰国旗问题、快速排序
一.荷兰国旗 1.题目描述 给定一个数组arr和一个数num,请把小于num的数放在数组的左边,等于num的数放在数组的中间,大于num的数放在数组的右边。 要求额外空间复杂度为O(1),时间复杂度为O(N)。 2.分析思路 初始化less=-1,more=len(arr),当前位置为cur=0。 设该过程为partition。设数组为(arr,l,r),0~less为小于num区域,...原创 2020-03-16 19:25:00 · 434 阅读 · 0 评论 -
归并排序、小和问题、逆序对
目录 一.归并排序 二.小和问题 三.逆序对 一.归并排序 1.算法思想 归并排序采取分治法的思想。 第一步将一个数组按规模依次分为两部分 ,先左侧排序,再右侧排序,最后再通过辅助数组整体外排,将2个有序数列合并为最终有序。 主要是如何将2个有序数列合并。只要从比较2个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的...原创 2020-03-13 23:38:36 · 172 阅读 · 0 评论 -
剑指offer学习笔记(9)--顺时针打印矩阵
考点:容器、图形集合 题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. 分析思路: 该问题包含多个循环,需要判断多个边界条件。按题目要求,可以把矩阵想象成多个...原创 2020-01-27 23:04:31 · 81 阅读 · 0 评论 -
排序算法:冒泡排序、插入排序、选择排序
目录 冒泡排序 插入排序 选择排序 冒泡排序 1.算法思想 比较相邻两个元素,如果前一个比后一个大则交换,使最大的一个落到最后位置。 除了最后一个位置,剩下元素重复上述比较和交换,得到次大元素。 重复上述步骤,直到没有元素需要比较。 越大的数会“冒泡”到最后。 2.时间复杂度O(N^2),额外空间复杂度O(1),算法稳定 3.实现代码 //冒泡排序 #includ...原创 2020-01-03 23:20:48 · 154 阅读 · 0 评论