![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Algorithm
文章平均质量分 54
庄放
这个作者很懒,什么都没留下…
展开
-
希尔排序练习(Shell's sort)
目的 进行希尔排序练习。明白希尔排序原理。 希尔排序:将间隔d的元素视为待排序数组,对该数组进行插入排序。然后逐步缩小d的值,最后直到d=1。这个特点又可以称呼希尔排序为缩小增量排序。 d=1时为直接插入排序。 d值的取法一般为折半获取,即每次排序完成,d=d/2. 代码 实现代码: void ShellSort(T testArray[], int nSize){原创 2016-03-16 23:12:16 · 607 阅读 · 0 评论 -
快速排序测试(QuickSort)
一. 目的 进行快速排序练习,掌握快速排序的原理。 算法证明: 第一步,数组分为四个区,无序小于关键值区A[1]-A[i],无序大于关键值区A[i+1]-A[j],待划分区A[j+1]-A[N-1],关键值区A[N],第一步时,只有两个区域不为空,即带划分区A[1]-A[N-1],关键值区A[N] 第二步:进入循环处理,若存在可以放在无序小区的元素,则将无序大区则将无序大区的下界元素与A[j原创 2016-03-27 23:13:27 · 1902 阅读 · 0 评论 -
Horner规则求解多项式的值
一. 目的与背景知识 1、生成一个多项式 2、根据Horner规则求解多项式的值。 伪代码如下: y=0 for i=n down to 0 y=A[i]+X*Y 上述伪代码即描述了求解A[0]+A[1]X^1+…+A[N] ( X ^N ) 二. 代码实现 1、多项式展示与计算类#include<iostream> namespace MyAlgorit原创 2016-04-12 23:52:10 · 673 阅读 · 0 评论 -
归并插入排序
一. 目的 当归并排序,划分的分组小于一定值时这些分组进行插入排序。然后对各个分组进行合并。 分析:标准归并排序增加长度限制即刻,长度达到限制,则调用插入排序。 二. 代码实现 1、代码实现 //对分组进行插入排序的归并实现 void MergeSortSubVerInsert(T testArray[], int Begin, int End){原创 2016-04-12 21:39:17 · 1724 阅读 · 1 评论 -
冒泡排序练习(Bubble Sort)
一. 目的 1)交换排序就是,调整序列中不符合顺序的元素进行交换,最终序列整体符合目标次序。 2)进行冒牌排序练习。 3)算法证明: 初始:将第二个元素与第一个元素进行调整,使之符合从小到大数序。 递归步骤:将第K个元素与前K-1个元素从小到大依次调整,将不符合的元素放在K位置,K放在正确位置。此时K与正确位置元素之后的元素一一交换,K充当中间变量,直到K-1元素与K元素调整。这样得到K个原创 2016-03-24 22:29:56 · 713 阅读 · 0 评论 -
桶排序(BucketSort)
一. 目的与背景知识 进行桶排序练习。 桶排序按总体将数据进行分组若干,组内插入排序。组内元素通过链表连接。二. 代码实现 调整数据生成类可以生成带小数位的浮点数。 TestDataCreator(ArrayType nArrayType = PositiveArray){ Sleep(1000);//暂停一秒,否则产生相同的随机种子原创 2016-04-05 23:35:37 · 321 阅读 · 0 评论 -
堆排序练习(Heap Sort)
一. 目的以及背景知识进行堆排序练习,掌握堆的构建与输出。 堆定义: 对于序列A[1,N],对于任意i都有A[i]>=A[2i],A[i]>=A[2*i+1],则该序列称为大顶堆或者最大堆。反之则成为最小堆。 堆筛选或堆调整: 从最后一个叶子结点开始筛选出该节点的兄弟结点与父节点中最大或最小的元素与父节点交换。 建堆算法证明: 第一步:i=N/2时,i+1,..N都是叶节点,原创 2016-03-23 00:19:21 · 865 阅读 · 0 评论 -
基数排序(RedixSort)
一. 目的与说明 进行基数排序练习。基数排序是对整数的每一位进行稳定排序。多次排序后,数据呈现有序状态。注意必须是稳定排序。可以推广到浮点数。二. 代码实现 定义进制常量#define NUMBER_SYSTEM 10定义获取数字位数与制定位的数字 //获取整数位数 int GetDigitWidth(int nNum){ int nWid原创 2016-04-05 01:57:39 · 436 阅读 · 0 评论 -
计数排序(CountingSort)
一. 背景知识与目的 1、进行计数排序练习。 2、计数排序说明: 计数排序只适用于整数的排序。 3、实现原理: 1)假设整数带排序数组A[1..N]从0…K中的任意整数的数组。建立计数数组C[0…K],元素初始为0 2)然后计算A[j]元素值的个数,放在计数数组中,计算方法遍历A[1…N],C[A[j]]=C[A[j]]+1。 3)由于C[0…N]标识每个位置上的元素的个数,前一个元素原创 2016-04-03 02:24:23 · 546 阅读 · 0 评论 -
归并排序(MergeSort)
一. 背景与目的 进行归并排序的练习。学习分治思想。 算法验证: 第一步:对数组A[1…N]进行中分,直到每两个元素一组。 第二步:对于每个划分进行合并,按大小合并。合并成一个有序数组。依次递归。 第三步:对A[1…M],A[M+1…N]进行合并,则A[1…N]是一个有序数组。算法证明完毕。二. 代码实现 实现代码: //归并排序 void MergeSor原创 2016-04-03 00:34:57 · 255 阅读 · 0 评论 -
直接插入排序(Straight Insertion Sort)
知识背景与目的 进行直接插入排序算法练习,使用上篇的数据生成测试。 插入排序:将待排序的元素插入到已经排序好的有序序列中。 插入排序常见的有:直接插入排序(straight Insertion Sort)与希尔排序(shell’s Sort) 直接插入排序:逐个将元素插入带已经排序好的有序序列中。 归纳法证明: 第一步:i=1,单个元素,肯定是已经排序好的。 第二步:i=j,将第j+1原创 2016-03-16 01:13:49 · 362 阅读 · 0 评论 -
简单选择排序练习(Simple Selection Sort)
一. 目的 进行简单选择排序练习。 算法证明: 第一步:J=2时,序列为A[1],选择A[2…N]中最小的一个与A[1]交换,保证了A[1]为有序序列,且A[1]小于A[2…N]中任意个元素。 第二步:J=K时正确,即A[1…K-1]为有序序列,且A[k-1]为有序序列的最大值,且A[k-1]小于A[k…N]中任意元素。当j=k+1时,选择A[k…N]中最小的元素,放在A[k]位置,得到有序原创 2016-03-20 19:48:58 · 559 阅读 · 0 评论 -
二分插入排序(BinaryInsertSort)
一. 目的 练下算法导论习题,通过二分法查找,快速定位插入位置。 二. 实现代码 实现代码 1、排序代码 //二分法插入排序 void InsertSortVerBinary(T testArray[],int nSize){ LogInfo<T> log = LogInfo<T>(); T key;原创 2016-04-10 22:49:56 · 824 阅读 · 0 评论