自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(19)
  • 收藏
  • 关注

原创 根据多边形顶点利用叉积计算多边形的有向面积

https://www.cnblogs.com/xiexinxinlove/p/3708147.html

2018-11-27 14:24:37 309

原创 zint库的下载编译和使用+VS2010+OpenCV之一

1.  介绍Zint库:Zint是一个生成条码/二维码的开源库,Zint的源码的下载:zint各个版本下载地址Zint是用 C语言 编写的,支持生成条码/二维码的格式为:one: 生成out.png图片two: 生成out.svg(就是在一个网页中的图)three: 生成out.txt(生成黑白图片,0是黑,1是白,out.txt中就是一个二维矩阵,存放图片的像素信息)2. 链接libpng库和z...

2018-04-27 18:43:35 1204

原创 索引堆的实现

   之前讲的基础堆的实现,是将数组元素进行交换最后建成最大堆,这种交换数组元素来建堆的方式有2个局限性:(1)若数组元素是非常复杂的结构(比如巨大的字符串),那么每次交换这些字符串消耗性能都是巨大的;(2)若数组成为最大堆以后,我们需要对某个下标下原来的元素进行操作,那么操作将会是很复杂的(比如假设每个下标代表一个进程,每个进程为一个系统任务,下标处对应的元素为该任务的优先级,那么在建成最大堆后...

2018-04-27 17:49:40 426

原创 VS2010+命令行编程、命令行参数

命令行(cmd)编程(开发平台Visual Studio 2010)1.      命令行参数介绍: int main(int argc, char** argv){           …  //内容           return0;}我们经常在代码中看到这样的main函数。这就是命令行参数,是通过cmd控制台中输入的参数传入到main()函数中。int argc;      //argum...

2018-04-27 17:45:42 10961

原创 原地堆排序

给定一个大小为n的数组,将这个数组heapify,变为最大堆,此时数组的第一个元素就是最大值,将该值与数组最后一个元素交换位置后,对前n-1个元素进行heapify,变成最大堆,将第一个元素与数组倒数第二个元素交换位置...以此类推,最后得到的数组就是从小到大排序的。

2017-09-16 10:34:34 608

原创 基础堆排序及其优化

我们将上一节中实现的堆放在Heap.h文件中,之前将的归并排序、快速排序分别放在merge.h和quick.h中,这一节实现堆排序,并将堆排序和归并排序、快速排序进行时间性能上的比较(堆排序也是时间复杂度为O(nlogn)的算法),整个C++代码如下:  Heap.h文件:#include #include #include #include #include using na

2017-09-13 14:32:43 1142

原创 堆的概念以及实现堆

普通队列就是遵循时间原则,先进先出,后进后出的一种队列结构;而优先队列则是按照优先级来决定出队的次序,与何时进入队列无关,实际生活中有很多优先队列的例子:医院候诊病人中,急诊病人优先看病,而不是按照病人到达医院的先后次序来,这就是一个优先队列的例子。  优先队列适合应用于动态场景中,比如游戏中自动作战,当存在多个敌人时,不是按照敌人出现的顺序进行攻击,而是根据某个优先级(比如先攻击血量最大的)

2017-09-12 17:04:05 484

原创 归并排序和快速排序的衍生问题(逆序对)

归并排序和快速排序存在一些衍生问题,比如计算一个数组中逆序对的数量。  首先介绍逆序对的概念:从数组中随意选出一对数,若前者大于后者,则称为逆序对。而一个数组中的逆序对的数量可以衡量数组的有序程度,比如一个完全有序的数组1 2 3 4 5 6 7,其逆序对的数量为0,数组完全有序;而7 6 5 4 3 2 1中逆序对的数量达到最大值,所以数组的有序程度很低。  对于求解逆序对数量的问题,可

2017-09-12 16:56:44 995

原创 针对重复键值的3路快速排序算法

针对待排序列中农存在大量重复键值的情况,上一节讲了一种对快排算法的优化,代码如下:templateint __patition(T arr[], int l, int r){ swap(arr[l], arr[rand() % (r - l + 1) + l]); T v = arr[l]; int i = l + 1, j = r; while(true)

2017-09-11 17:21:15 556

原创 快排算法的针对重复键值的优化

上一节讲了快排算法在序列基本有序的情况下的两种优化方法,这一节我们对新的测试用例进行测试,测试用例如下所示:int main(){ //测试 - 待排序列的重复值很多 int n = 400000; int *arr = SortTestHelper::generateRandomArray(n, 0, 10); int *arr2 = SortTestHel

2017-09-11 11:51:48 2168

原创 快速排序的底层递归优化和针对基本有序序列的优化

在归并排序算法的优化这一节提到过,高级排序算法几乎有一个通用的优化方法,就是对递归底层的操作进行优化。先来看快速排序算法://对arr[l...r]进行patition操作//返回p,使得arr[l...p-1]arr[p+1...r]templateint __patition(T arr[], int l, int r){ int j = l; for(int i

2017-09-10 18:46:43 1007

原创 快速排序

快速排序是除归并排序之外的有一种高级排序算法,时间复杂度为O(nlogn),快速排序时交换排序的一种,是对冒泡排序作出的改进。冒泡排序每一都是相邻的两个元素进行比较和交换,每次交换只能消除一个逆序;而快速排序算法每次交换可以消除多个逆序,它的基本思想是:通过一趟排序将待排序列分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序

2017-09-09 17:01:28 242

原创 自底向上的归并排序算法

归并排序算法分为自顶向下和自底向上实现的,自顶向下实现归并排序就是用二分法将一个完整的数组逐级划分,然后逐级归并,一般采用递归算法实现,正如之前给出的归并排序算法;而自底向上的归并排序就是将数组中的每个元素看成是一个个有序子序列,然后两两归并,形成新的有序序列,接着再两两归并,直到得到一个完整的有序序列为止,如下图所示:  自底向上的归并排序算法只需要用循环迭代就可以实现,具体C++实

2017-09-09 15:26:59 2157

原创 归并排序算法的优化

上一篇讲到的归并排序算法,在待排序列基本有序或者完全有序的情况下进行测试,其时间性能比插入排序差很多,针对这种情况,对归并排序算法作出优化,先观察归并排序算法的代码:templatevoid __mergeSort(T arr[], int l, int r) //一定要注意我设定的是左闭右闭[l...r](r是最后一个元素){ //递归使用归并排序,对arr[l...r]进行归

2017-09-07 16:15:43 532

原创 归并排序

归并排序是一种时间赋值度为O(nlogn)级别的算法,其基本思想就是利用二分法将一个待排序列逐层向下划分,直到每一组中只有1个数据为止,然后将这些只有1个数据的序列都视为有序序列,逐层向上归并成有序序列。  根据二分法的思想可知,一个含有n个数据的序列,可以向下划分为logn个层级,而在每个层级上若可以使用时间复杂度为O(n)的算法来是想归并,则归并排序算法的时间复杂度即为O(nlogn)。

2017-09-06 15:39:04 304

原创 希尔排序

希尔排序是和插入排序一脉相承的,是对插入排序的优化。插入排序算法在待排序序列较短、序列基本有序的情况下时间性能很好,而希尔排序就是从这两点出发改进插入排序:减少序列长度、序列基本有序。  希尔排序的基本思想:将待排序列划分为几组(根据增量d来执行),对每一组分别进行直接插入排序,然后改变增量d(变小),重新对待排序列进行分组,对每一组分别进行直接插入排序,依次类推,直到最后使用增量1来划分待排

2017-09-06 15:37:11 296

原创 冒泡排序及其优化

冒泡排序属于交换排序,基本思想:从待排序序列的第2个记录开始,和其前一个相邻的记录进行比较,若发生逆序,则交换。  冒泡排序的C++实现:  SortTestHelper.h文件(包含排序的辅助函数)#include #include #include //clock()、CLOCKS_PER_SEC#include //包含函数assert()using n

2017-09-06 12:06:52 308

原创 插入排序及其优化

插入排序基本思想:将待排序列视为有序和无序两部分,首先将第1个记录视为有序,从第2个记录arr[1]开始,依次与前面的记录的关键字进行比较,若arr[1]小于arr[0],则交换两者,此时待排序列的第1、2个记录组成有序部分,将第3个记录arr[2]依次与arr[1]、arr[0]进行比较,若arr[2]较小,则依次和前面的值进行交换,依次类推...  插入排序的C++实现:Sor

2017-09-06 11:31:11 255

原创 选择排序

选择排序的基本思想:第一趟从第1个记录arr[0]开始,依次向后查找关键字最小的记录(记为arrr[k]),交换arr[0]和arr[k],第二趟从第2个记录arr[1]开始,依次向后查找关键字最小的记录(记为arrr[k]),交换arr[1]和arr[k],依次类推...选择排序的C++代码实现如下:SortTestHelper.h文件(其中包括一些常用于排序算法的辅助函数)#i

2017-09-06 09:29:57 242

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除