
经典面试算法
freeygh
这个作者很懒,什么都没留下…
展开
-
十大排序算法之插入排序3
3、插入排序(Insertion Sort) 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 3.1 算法描述 一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下: 从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已经排序的元素...原创 2019-04-24 18:04:01 · 105 阅读 · 0 评论 -
排列and组合问题
字符串或者数字的全排列,组合问题,在笔试面试中十分常见。 1.全排列问题,如:字符串ABCDEF的所有排列问题或者数字1234的全排列问题 Case 1:普通情况 Leetcode 46题 代码: class Solution { public: vector<vector<int>> permute(vector<int>&...原创 2019-07-18 21:29:04 · 199 阅读 · 0 评论 -
十大排序算法之归并排序5
5、归并排序(Merge Sort) 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 5.1 算法描述 把长度为n的输入序列分成两个长度为n/2的子序列; 对这两个子序列分别采...原创 2019-04-27 18:24:41 · 124 阅读 · 0 评论 -
十大排序算法之快速排序6
6、快速排序(Quick Sort) 快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 6.1 算法描述 快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下: 从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有...原创 2019-04-27 22:02:07 · 152 阅读 · 0 评论 -
查找算法之折半查找(二分查找)
折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高。但是该算法的使用的前提是静态查找表中的数据必须是有序的。也可以是分区有序的,如剑指Offer面试题11:旋转数组的最小数字。 代码实现: int Binary_Serach(int *a,int n ,int key) { int low,high,mid; low=1; high=...原创 2019-04-28 10:42:38 · 262 阅读 · 0 评论 -
0-1背包问题(动态规划问题)
背包九讲讲解: 1.基本0-1背包问题 2.完全背包问题 3.多重背包问题 【1】https://blog.youkuaiyun.com/xp731574722/article/details/70766804 【2】https://www.cnblogs.com/xym4869/p/8513801.html 【3】https://blog.youkuaiyun.com/chan...原创 2019-06-22 21:05:10 · 135 阅读 · 0 评论 -
十大排序算法之希尔排序4
4、希尔排序(Shell Sort) 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。 希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算...原创 2019-04-25 10:05:21 · 147 阅读 · 0 评论 -
十大排序算法之选择排序2
2、选择排序(Selection Sort) 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 2.1 算法描述 n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。具体算法描述...原创 2019-04-23 00:29:08 · 134 阅读 · 0 评论 -
十大经典排序算法总结0
0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序。 非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序。 0.2算法复杂度 0.3 相关概念 稳定:如果a原本在b前...原创 2019-04-22 16:00:37 · 330 阅读 · 0 评论 -
十大排序算法之冒泡排序1
1、冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 1.1 算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同...原创 2019-04-22 16:20:47 · 239 阅读 · 0 评论 -
十大排序算法之堆排序7
1.最小堆,排序,(从大到小) #include <iostream> #include <vector> #include <algorithm> using namespace std; // 从i节点开始调整,n为节点总数 从0开始计算 i节点的子节点为 2*i+1, 2*i+2 void MinHeapFixdown(int a[], int...原创 2019-09-04 11:09:46 · 215 阅读 · 0 评论