算法
文章平均质量分 71
RusonWong
这个作者很懒,什么都没留下…
展开
-
分解质因数
质因数概念:每个合数都可以写成几个质数相乘的形式,这几个质数就都叫做这个合数的质因数。如果一个质数是某个数的因数,那么就说这个质数是这个数的质因数。而这个因数一定是一个质数。算法原理:先根据需要分解的合数生成一个质数表。然后依次从小到大依次除合数,每次除之后都将保存步骤。表达不好,还是看代码吧:using System;using System.Collectio原创 2012-03-24 18:03:49 · 792 阅读 · 0 评论 -
排序算法---堆排序
堆排序很快(NLogN)。实现起来也比较麻烦,主要麻烦的地方是如何实现一个堆。这里直接用写好的堆(数据结构实现---堆)进行排序。有了堆,实现对排序也就很简单了。代码如下: class HeapSorter { private Heap m_heap; public bool Sort(ref int[] numbers, int ar原创 2012-03-16 17:01:22 · 495 阅读 · 0 评论 -
排序算法--冒泡排序
这个算法其实很简单,也很慢(n*n),原理是不断比较相邻两个元素,如果需要的话,换续,直到排列结束。 不多解释,C#代码如下:class BubbleSorter { public BubbleSorter() { } public bool Sort(ref int[] numbers原创 2012-03-16 16:22:52 · 641 阅读 · 0 评论 -
排序算法---选择排序
这个排序也很简单,时间复杂度是n*n.原理是:每次找未排序元素中最小(大)的元素,然后插在已排序的序列的最后。废话不多说,看c#代码:class SelectSorter { public bool Sort(ref int[] numbers, int arrSize) { doInsertSort(ref num原创 2012-03-16 16:31:05 · 471 阅读 · 0 评论 -
排序算法---快速排序
快速排序时间复杂度是n*Logn。原理:1.从一组数中选取一个,将数组根据选取的那个数分成三部分:左边比它小,等于它,右边比它大。2.对 左边和右边分别按1方法继续分。然后在将新分出来的左边右边继续分3.直到左边或右边的数组大小为1.一直觉得汉语表达能力不行,还是看代码吧:class QuickSorter { public bool S原创 2012-03-16 17:09:59 · 468 阅读 · 0 评论 -
排序算法--位图算法
最近在看Jon Bentley的《编程珠玑》,刚看完第一章,觉得老外写的东西就是要比国内的生动很多! 第一章是开篇,要说的事情是:要把问题描述清楚。为了说明白这个事情,作者举了一个实例:怎样给一个磁盘文件排序? 这个问题问的很模糊是不是? 其实这个问题正确清楚的描述如下:输入:一个最多包含n个正整数的文件,每个数都小于n,其中n=10,000,000。输入文件中没有重复的整数,没有其他原创 2012-03-16 16:04:18 · 7710 阅读 · 1 评论 -
排序算法---合并排序
这个排序比起冒泡,选择什么的就快很多了,时间复杂度是n*logN,但是实现起来也很复杂。原理是:第一步,合并1、2|3、4| 5、6....(相邻两个排序)第二步,合并1、2、3、4|5、6、7、8|9...(相邻四个排序)...实现起来最主要的是合并的函数,废话不多说,看代码:class MergerSorter { public原创 2012-03-16 16:47:47 · 648 阅读 · 0 评论 -
数据结构---栈实现
栈和队列不一样,栈是后进先出。实现时用了数组储存栈,数组大小根据内容自动扩充。废话不多说,上代码(C++)MyStack.h#pragma oncetemplateclass MyStack{private: int m_tail; int m_arrSize; T* m_QueueArray;public: MyStack(); ~MyStack原创 2012-03-16 20:08:19 · 697 阅读 · 0 评论 -
数据结构---队列实现
栈是后进先出(先进后出),队列是先进先出(后进后出)。我实现的是一个循环队列,当数组大小不够的时候,自动扩充大小。废话不多说,看代码:MyQueue.h#pragma oncetemplateclass MyQueue{private: int m_head; int m_tail; int m_arrSize; int m_count; T原创 2012-03-16 18:38:45 · 468 阅读 · 0 评论