算法
文章平均质量分 75
zk_sima
这个作者很懒,什么都没留下…
展开
-
鸡尾酒排序的实现
<br />定义:<br />也就是定向冒泡排序, 鸡尾酒搅拌排序, 搅拌排序 (也可以视作选择排序的一种变形), 涟漪排序, 来回排序 or 快乐小时排序, 是冒泡排序的一种变形。此演算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。(摘抄自 百度百科)<br /> <br />实现:<br />template<typename Iter,typename T> void cocktail_sort(Iter first,Iter last,T) { bool flag=false;原创 2011-03-20 18:55:00 · 617 阅读 · 0 评论 -
分治法
分治法: 1) 将问题的实例划分为同一个问题的几个较小的实例,最好拥有同样的规模 2) 对这些较小的实例求解(一般使用对贵方法,但在问题规模足够小的时候,有时候会利用另一个算法)。 3) 如果必要的话,合并这些较小问题的求解,已得到原始问题的解 1. 归并排序 算法: mergeSort(A,n) //用对贵调用对数组 A进行排序 //输入:一个待排序的数组原创 2011-11-03 11:04:53 · 912 阅读 · 0 评论 -
算法学习1
时间过得挺快,一晃就快毕业了。工作找好了,最近也闲的无聊,所以买了本算法书,想好好的看看算法。话不多说从最基本的算法开始: 1. 求小于根号n的最大整数。 算法: for m if m*m return m 实现: int sqrtN(int n) {原创 2011-10-27 10:33:52 · 594 阅读 · 0 评论 -
归并排序的实现
<br />定义:<br />归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。 (从百度百科上摘抄下来的)<br /> <br />基本的实现可以如下表示:<br /> <br />void merger_sort(Iterator first,Iterator last)<br />{<br />if(last-first<=1)<br />return ;<br />Iterator m原创 2011-03-31 13:44:00 · 540 阅读 · 0 评论 -
堆排序的实现
<br />堆排序也就是一个简单的完全二叉树,满足的规则是每个父节点大于(小于)子节点,一般通过线性队列来实现,所以一般是通过数组来实现的。<br />基本的排序步骤是:<br />1.创建堆 CreateHeap<br />2.依次的取出头节点(也就是最大值或者最小值) deleteMax<br />3.把取出的值放到一个新的容器中,当然我们为了空间复杂度较小 可以直接在原有的容器末尾插入。<br /><br /><br />实现:<br />HeapSort.h<br /><br />//堆排序的实现,原创 2011-05-16 21:01:00 · 414 阅读 · 0 评论 -
归并排序的实现(again)
<br />归并排序也就是把一个数列分成两份,首先分别对2份进行排序,然后把这2份一起排序,典型的递归实现.<br />实现代码: MergeSort.h:<br /><br />//归并排序时间复杂度:NlogN,但是由于存在<br />// for(int i=0;i!=length;++i)<br />// *first++=*(assistSpace+i);<br />//数据的复制需要额外的时间,原创 2011-05-18 00:09:00 · 503 阅读 · 0 评论 -
快速排序的实现
<br />快速排序的思想跟归并排序的思想是一致的,也就是把一个大的问题,分成2个小的问题,然后再合并.<br />概念简单来讲就是,首先在待排序队列里面找到一个数,比这个数小的放到这个数的左边,比这个数大的放到数的右边,然后分别对左右两边进行递归排序.<br />代码如下:QuickSort.h<br /><br />/******************************************************<br />* 快速排序步骤:QuickSort<br />*原创 2011-05-19 00:48:00 · 522 阅读 · 0 评论 -
计数排序的实现
<br />定义:<br />计数排序(Counting sort)是一种稳定的排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。(来自维基百科)<br /> <br />实现:<br /> <br /> <br />#ifndef COUNT_SORT_H #define COUNT_SORT_H #include<iostream> using namespace std; template<typename原创 2011-03-25 15:49:00 · 485 阅读 · 0 评论 -
桶排序的实现
<br />最近CSDN不知道搞什么,很慢,太无语了。<br />桶排序定义:<br />N个数,区间在[0,1),把这段区间划分成N份,然后把这N个数依次放到这N份区间中去,注意这里每份空间都代表一个桶,然后对桶里面的元素进行排序,最后把桶结合起来就成了有序的数列。<br />在这里我把区间设为[min,max+1),原理是一样的,其实桶排序的实现是从哈希表来的,后面有时间按会实现hash表的。<br />源码:<br />#ifndef BUCKET_SORT_H #define BUCKET_SOE原创 2011-03-24 17:57:00 · 659 阅读 · 0 评论 -
希尔排序的实现
希尔排序,也就是对于一列数据,对间隔为k的数据进行排序,也就是对于 1、1+k、1+2×k....;2、2+k、2+2×k、....;..... 分别进行排序,这样 间隔为k 的数据就是有序的了,然后逐渐减小k的值,知道k为1的时候,也就是对整个数列进行完整的排序了。希尔排序关键的地方是 k值怎么确定,k为多少的时候效率最高,一般来说 是2n-1,2n-1-1,.......1 这样的k比较好。关键代码如下:templatevoid __shellSort(Iterator first,Iterator原创 2011-05-12 00:08:00 · 552 阅读 · 0 评论 -
插入排序的实现
<br />插入排序,就是吧第p位置的数据,插入到容量为p的有序容器中。<br />当然,一般来说,我们可以重新分配一块新的空间,用来存放有序的数据。但是下面的例子是在就的空间上进行排序,每次插入操作就是把第p位置的数据插入到0~p的位置上:<br /><br />template<typename Obj,typename Iterator_><br />void _insert_sort(Iterator_ first,Iterator_ last,Obj)<br />{<br /> f原创 2011-05-11 23:58:00 · 418 阅读 · 0 评论 -
冒泡算法的实现
<br />定义:<br />冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二原创 2011-03-20 18:06:00 · 476 阅读 · 0 评论 -
蛮力法
蛮力法:是一种简单直接地解决问题的方法,常常直接给予问题的描述和所涉及的概念定义。 1. 选择排序 算法: SelectionSort(Array a) //该算法用选择排序对给定数组排序 //输入:一个可排序数组 A[0,1,….n-1] //输出:一个已排序数组 A[0,1,….n-1](升序) for i min原创 2011-11-01 16:21:32 · 1402 阅读 · 1 评论