![](https://img-blog.csdnimg.cn/20181125213102841.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
最近系统学习算法和数据结构中,记录学习的一些算法,和感悟。
断桥bian
我始终相信,一个程序员最大的价值是他的创造力,而不仅仅是他的编码能力!
展开
-
算法-归并排序
归并排序思路归并排序采用的是分治的思想,将一个 n 长度的数组不断的分成无数个小数组,然后对小数组进行排序,最后将所以的有序小数组合并,最终数组有序。算法复杂度 归并排序的平均复杂度: O(n) = nlogn, 最坏时间复杂度为:O(n) = nlogn算法空间复杂度 归并排序的空间复杂度: O(n) = npython实现# 递归实现import ...原创 2018-12-10 21:31:34 · 197 阅读 · 0 评论 -
算法-插入排序
插入排序思路插入排序是最直观和自然的排序,它是从左到右,将一个数从它为起始位置 loc ,从右向左,进行比较,如果 array[loc-1] < array[loc] 或者 loc = 0 ,那么就将这个数插入 loc 位置,否则 loc 位置左移 ( loc = loc -1 )继续进行比较,直到数组有序。算法复杂度 插入排序的最坏时间复杂度为: O(n) = ...原创 2018-12-09 22:39:02 · 206 阅读 · 0 评论 -
算法-冒泡排序
冒泡排序思路模拟水中的冒泡过程, 大的水泡总是从底部不断的超过小的水泡,最终上升到水面。冒泡排序也是,从左到右,小的数不断的从右边冒泡上升到左边,最终实现有序。复杂度 冒泡排序的最坏时间复杂度为: O(n) = n^2,平均复杂度为: O(n) = n^2python实现def bubblesort(arr): for i in range(0,len(arr...原创 2018-12-09 21:34:54 · 144 阅读 · 0 评论 -
算法-纸牌游戏
纸牌游戏时间限制:1秒空间限制:32768K牛牛和羊羊正在玩一个纸牌游戏。这个游戏一共有n张纸牌, 第i张纸牌上写着数字a_i。牛牛和羊羊轮流抽牌, 牛牛先抽, 每次抽牌他们可以从纸牌堆中任意选择一张抽出, 直到纸牌被抽完。他们的得分等于他们抽到的纸牌数字总和。现在假设牛牛和羊羊都采用最优策略, 请你计算出游戏结束后牛牛得分减去羊羊得分等于多少。输入描述:输入包括两行。第...原创 2018-11-25 17:44:49 · 1575 阅读 · 0 评论 -
算法-翻转数列
翻转数列小Q定义了一种数列称为翻转数列:给定整数n和m, 满足n能被2m整除。对于一串连续递增整数数列1, 2, 3, 4..., 每隔m个符号翻转一次, 最初符号为'-';。例如n = 8, m = 2, 数列就是: -1, -2, +3, +4, -5, -6, +7, +8.而n = 4, m = 1, 数列就是: -1, +2, -3, + 4.小Q现在希望你能帮他算算前n项和为...原创 2018-11-25 17:41:35 · 1145 阅读 · 0 评论 -
算法-查找数组中的前M大的数
查找数组中的前M大的数思路根据快速排序的Partition的思想,假定数组长度为n, 选定一个pivot,总能将数组分为 [0,k-1]和[k,n], 其中[0,k-1]<pivot,[k+1,n] > pivot。如果 k = m, 那么算法结束。如果k > m, 对[k+1,n]继续进行切分,每次切分k都会减少一部分, 直到k = m, 如果k < m, 对...原创 2018-11-25 17:38:57 · 1057 阅读 · 0 评论 -
算法-分块/索引查找
分块/索引查找思路前提: 1.块间有序 2.块内可以无序 3.索引中保存块的起始地址,和块内的最大值或者最小值 首先对索引进行折半查找,然后对块内进行顺序查找。算法复杂度 假设一个n长度的数组分为m块,每块的长度为: n/m, 那么算法的平均复杂度:O(n) = logm+n/m, 算法最坏情况下的复杂度: O(n) = logm + n/m。cpp实现st...原创 2018-11-25 17:36:04 · 607 阅读 · 0 评论 -
算法-二分/折半查找
二分/折半查找思路前提: 数组必须是已经排好序的有序数组。假设数组为升序排列,把数组一分为二,取中间点mid做比较,如果比mid大, 那么继续在[mid+1,last]中查找,反之在[first,mid-1]中查找,对子数组继续进行上述操作,直到找到。算法复杂度 平均算法复杂度为: O(n) = logn;最坏情况的算法复杂度为: O(n) = logn;cpp实现...原创 2018-11-25 17:33:44 · 275 阅读 · 0 评论 -
算法-顺序搜索
顺序查找思路从数组的开头到结尾,顺序挨个比较查找。算法复杂度 平均算法复杂度为:O(n)= n; 最坏情况的算法复杂度为:O(n) = n;cpp实现int orderSearch(int dest_arr[],int dest) { int arr_len = sizeof(dest_arr)/sizeof(*dest_arr); for(int ...原创 2018-11-25 17:30:44 · 327 阅读 · 0 评论 -
算法- 快速排序
快速排序思路选定一个pivot, 移动元素使得pivot左右两边的元素,一边大于pivot, 一边小于pivot, 然后分别对左右两边递归进行同样的操作,最后得到一个有序排列。复杂度 快速排序的最坏时间复杂度为: O(n) = n^2,但平均复杂度为: O(n) = nlogncpp实现template <class Type>void Swap(...原创 2018-11-25 16:19:00 · 188 阅读 · 0 评论