算法
文章平均质量分 82
zhuowp
这个作者很懒,什么都没留下…
展开
-
快速排序(一)——C#实现
一 算法描述 快速排序算法是一种利用分治法进行排序的算法。原创 2017-10-17 17:16:56 · 486 阅读 · 0 评论 -
快速排序(二) 随机化——C#实现
一 快速排序随机化 在快速排序(一)中提到,尽管快速排序的最差时间复杂度是θ(n^2),但是其平均时间复杂度是θ(nlgn),在文末的测试中也反映了这一点。但是作出这一判断的前提是,我们认为输入数组的所有排列都是等概率的。但是这一假设并非往往都成立。 考虑一个已经是按照升序排序的数组作为快速排序的输入数组,则排序中每一次划分都会将元素划分成元素个数分别为n-1和0的两原创 2017-10-19 10:37:07 · 584 阅读 · 0 评论 -
计数排序——C#实现
一 算法描述 插入排序、选择排序、冒泡排序、归并排序、堆排序以及快速排序都是比较排序算法——各元素之间的次序依赖于他们之间的比较。在最坏情况下,任何比较排序算法都需要做Ω(nlgn)次比较。因此堆排序和归并排序都是渐进最优的比较排序算法。 计数排序不是一种比较排序算法,二是基于运算来确定元素的排序顺序,因此Ω(nlgn)的时间复杂度下界不再适用于计数排序。原创 2017-10-20 15:17:06 · 901 阅读 · 0 评论 -
冒泡排序——C#实现
一 算法描述 冒泡排序算法(Bubble Sort)是一种流行但低效的排序算法。它的原理是反复比较待排序数组中所有相邻的两个数据,使他们按照升序(或降序)排列。当待排序数组中所有相邻数据都比较过一次之后,待排序数组中最小(或最大)的数据会被逐步交换到第一位,就像气泡从水底慢慢升到水面一样,故名“冒泡排序算法”。 二 算法实现 1 用于整数数组原创 2017-10-14 11:50:47 · 9058 阅读 · 1 评论 -
选择排序——C#实现
一 算法描述 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 二 算法实现(C#) 1 用于整数数组的升序排序 public static void SelectionSort(int原创 2017-10-13 11:00:50 · 1240 阅读 · 0 评论 -
插入排序——C#实现
一 算法描述 插入排序是一种针对少量元素的有效的排序算法。其基本操作是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。在《算法导论》一书中,作者以人们常用的排序扑克牌的例子来说明此算法: “开始时,我们的左手为空并且桌子上的牌面向下。然后,我们毎次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与原创 2017-10-12 11:07:58 · 1193 阅读 · 0 评论 -
归并排序——C#实现
一 算法描述 归并排序算法(Merge Sort)是一种采用分治法(Divide-And-Conquer)的排序算法。分治策略将原问题划分为n个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后在合并其结果,就得到原问题的解。分治模式在每一层递归上都包含三个步骤:分解、解决、合并。 具体到归并算法,三个步骤分别为: 分解:将n个元素分成各原创 2017-10-15 14:03:46 · 4776 阅读 · 0 评论 -
堆排序——C#实现
一 算法描述 堆排序(Heap Sort)是利用一种被称作二叉堆的数据结构进行排序的排序算法。 二叉堆在内部维护一个数组,可被看成一棵近似的完全二叉树,树上每个节点对应数组中的一个元素。除最底层外,该树是满的。 二叉堆中,有两个与所维护数组相关的属性。Length表示数组的元素个数,而HeapSize则表示二叉堆中所维护的数组中的元素的个数(并不是数原创 2017-10-16 17:10:16 · 3409 阅读 · 2 评论