![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法100题
文章平均质量分 82
EasOn_WanG_
希望在这个大家庭中,学到更多,同时也贡献自己的一点微薄之力
展开
-
集合A,B求其交集只适合正整数
思路1:排序法 对集合A和集合B进行排序(升序,用快排,平均复杂度O(N*logN)),设置两个指针p和q,同时指向集合A和集合B的最小值,不相等的话移动*p和*q中较小值的指针,相等的话同时移动指针p和q,并且记下相等的数字,为交集的元素之一,依次操作,直到其中一个集合没有元素可比较为止。 优点:操作简单,容易实现。 缺点:使用的排序算法不当,会耗费大量的时间,比如原创 2014-04-19 21:44:24 · 736 阅读 · 0 评论 -
随机洗牌算法
扑克牌洗牌是我们生活中比较喜欢玩的一个游戏。那么我们有没有什么办法自己设计一个扑克牌洗牌的方法呢?在c运行库当中有一个随机函数rand,它可以生成0~32767之间的任意数。那么有没有可能利用这么一个函数对我们扑克牌进行随即洗牌呢? 在这里我抛砖引玉一下,谈一谈自己目前已经看到的两个算法。欢迎朋友们谈一谈其他的方法。 (1)全局洗牌法 步骤如下所示:原创 2014-04-19 21:08:15 · 719 阅读 · 0 评论 -
快速排序
快速排序算法是基于分治策略的一种排序算法。基本思想是,对于输入的子数组a[left : right],按以下三个步骤进行排序: (1)分解。以a[left]为基准元素将a[left : right]分成三段,a[left : p-1],a[p], a[p+1 : right]。使得a[left : p-1]中的任何一个元素小于a[p],a[p+1 : right]中的任何一个元素大于原创 2014-04-19 21:49:48 · 520 阅读 · 0 评论 -
简单选择排序
直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后。跟冒泡法的程序类似,这里是记录了下表,然后才执行ji 设数组为a[0…n-1]。 1. 初始时,数组全为无序区为a[0..n-1]。令i=0 2.原创 2014-04-19 22:48:45 · 359 阅读 · 0 评论 -
直接插入排序
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为a[0…n-1]。 1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=1 2. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。原创 2014-04-19 23:03:52 · 406 阅读 · 0 评论 -
希尔排序
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很原创 2014-04-19 23:11:01 · 569 阅读 · 0 评论 -
堆排序
堆排序中,最初的步骤就是建立一个堆。之前在一些公司的笔试题上面见到一些与建堆过程相关的题目,因为当时对建堆过程有个误解,所以经常选错。之前一直以为是在完全二叉树中依次插入序列中的元素,每插入一个元素,就调用siftup操作;而实际的建堆操作是序列中元素首先就全部填入一个完全二叉树,然后从第一个非终端节点开始,调用siftdown操作,依次调整。 堆排序过程 堆分为大根堆和小原创 2014-04-19 23:37:56 · 616 阅读 · 0 评论 -
中缀后缀表达式的转换
它们都是对表达式的记法,因此也被称为前缀记法、中缀记法和后缀记法。它们之间的区别在于运算符相对与操作数的位置不同:前缀表达式的运算符位于与其相关的操作数之前;中缀和后缀同理。 举例: (3 + 4) × 5 - 6 就是中缀表达式 - × + 3 4 5 6 前缀表达式 3 4 + 5 × 6 - 后缀表达式 中缀表达式(中缀记法) 中缀表达式是一种通用的算术或逻辑公式表示方法原创 2014-04-22 11:03:09 · 707 阅读 · 0 评论