- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 排序算法之六 堆排序
堆排序(Heap sort),是利用数据结构堆(Heap)来对数列进行排序的方法。堆类似于一种完全二叉树,其元素分布在一个数组之中,不同的树节点编号对应不同的数组索引号。比如:数组10 6 3 7 2 8 9 2 4 1 对应的堆形状类似于:总结起来,就是父节点 i 的左子节点在位置 (2*i);父节点 i 的右子节点在位置 (2*i+1);子节点 i 的父节点在位置 floor(
2012-08-24 12:05:29
310
原创 排序算法之六 快速排序
快速排序(Quick sort),是一种分治算法的实现,其思想为:在待排序数列里面选择一个基准(pivot)将数列分为两个部分,其中基准之前的部分都比基准值小,后半部分大于基准值,这个操作称之为分区(partition);然后分别对前后半部分进行分区操作。算法示例:待排序数组:10 6 3 7 2 8 9 2 4 1 n = 10 首先进行分区。令 left 表示左边界,righ
2012-08-24 10:35:19
274
原创 排序算法之五 归并排序
归并排序(Merge sort),是一种分治排序法,将排序任务分为三个部分:前半部分的递归排序、后半部分的递归排序以及已排好序的前后两部分的合并。归并法是一种递归的算法,是通过函数的递归调用来实现的。示例如下:待排序数组:10 6 3 7 2 8 9 2 4 1 n = 10Step1:原数组分为数组A: 10 6 3 7 2 和数组B:8 9 2 4 1的分别排
2012-08-23 23:13:58
343
原创 排序算法之四 Shell排序
Shell 排序是将待排序序列 d 进行分组排序,分组排好序之后,在增大组数(也就是减小分组间隔)来进行分组排序,一直到分组间隔足够小(为 1 时)就得到了排好序的结果数组。Shell 排序过程示例如下:待排序数组:10 6 3 7 2 8 9 2 4 1 n = 10Step1:以 (10/2 = 5) 为分组间隔进行排序:i 与(i+5),i + 5 结果:10 6
2012-08-23 21:44:19
339
原创 排序算法之三 插入排序
插入排序的原理在于,将数字序列 d 分为两个序列(前者有序,后者无序),每遍历一个元素就将该元素插入到前半部份的合适位置。插入排序的算法原理很容易理解,实现步骤如下:i = 0,将 d[i] 插入到 i 之前的有序序列之中;i = i + 1,将 d[i] 插入到 i 之前的有序序列之中,插入的过程为将自己与自己之前的元素进行比较,如果自己比其前面的元素都大,则什么也不用做;否则就插入
2012-08-23 21:15:58
289
原创 排序算法之二 冒泡排序
冒泡排序(Bubble sort)的算法原理如下:从第一个元素开始,每两个元素进行比较,将较大的元素放在后面;比较之后,进行下一对比较;一直到最后一个元素,这样得到的最后一个元素就是整个数组里面的最大值,这个过程就称之为冒泡。以这种方式对剩余的元素进行冒泡,最后就得到了排好序的数组序列。冒泡排序法是稳定的;算法很简单,下面直接贴出代码。void bubbleSort(double *
2012-08-23 20:54:05
287
原创 排序算法之一 选择排序
开始了对排序算法的学习,现在进行系统地整理一下。说到排序,维基百科上面的解释是,排序算法(Sorting algorithm)是一种能将一串数据依照特定排序方式的一种算法。对排序算法进行分析和评价,可以从时间复杂度(最差和平均)、空间复杂度和稳定度上面来进行。当进行排序时,最容易想到的算法就是,遍历待排序的序列,找出最大值、次大值。。。,然后按照大小顺序进行重排。这就是选择排序的思
2012-08-23 20:03:11
639
转载 ArcToolbox使用之二——Data Managerment Tools
转贴自:http://blog.163.com/lele..tiantian/blog/static/60396264201161810164156/一、Data Comparison(数据比较)1.Feature Compare:比较两要素类返回比较结果,能够返回几何类型、空间参考,字段定义和tabular values的不同之处。2.File Compare:比较两个文件,
2012-08-20 14:29:31
7317
转载 ArcToolbox使用之一——Analysis Tools
转贴自: http://blog.163.com/lele..tiantian/blog/static/60396264201161893954281/一. Extract(提取)1. Clip(剪切):使用一个面对点,线,面进行剪切,以提取所需范围内的数据。2. Select(选择):使用SQL语句将输入的要素类中的部分要素提取出来形成新的一个要素类。
2012-08-20 13:55:31
3547
原创 STL学习笔记之 (五)容器 vector deque list 使用条件
根据vector、deque和list的相关特点,在实际应用中使用的准则如下:需要频繁地随机访问容器内的元素:vector已知需要存储元素的个数:vector需要在容器的中间部分插入或者删除元素:list同时需要在首尾插入删除元素:deque容器的选择主要是看实际应用的需求,主要是操作的频繁性:在相关中间插入操作不频繁的情况下,vector也可以提供list相似的效率;和数据量的大小:
2012-07-24 21:19:49
526
原创 STL学习笔记之 (四)容器 list
list,即俗称的双向链表,通过前向指针和后向指针将所有元素联系在一起。list实现了在任意位置插入、移动和删除元素的高效;但是对于元素的随机访问则无能为力。使用size()可以知道list中已经存放的元素个数,max_size()可以知道可存放元素的最大个数。resize(size_type)可以来调整list的大小。empty()可以用来查看list是否为空。front()和bac
2012-07-24 21:04:16
322
原创 STL学习笔记之 (三)容器 deque
deque,即double end queue,双向队列。不同的平台会提供不同版本的deque实现策略,但归结起来,deque应该是一种指针数组实现。使用deque可以实现元素的随机访问和遍历,同时在起始端和末端插入和删除元素的效率很高;但是,在中间部分插入和删除元素会导致很低的工作效率。deque的内存使用可能是分块存储的,这样可以避免大块内存的重新分配。使用size()可以知道
2012-07-24 20:46:25
926
原创 STL学习笔记之 (二)容器 vector
STL,即Standard Template Library,是C++自带的标准模板库。主要由Alexander Stepanov开发完成,现在已成为C++的一个重要组成部分和特色之处。STL使用了模板机制,将C++编程分解为了三个相互之间独立的部分:数据类型(基本数据类型、类和结构体)、容器(数组和新的STL容器类)以及算法(Algorithm)。按照权威介绍,STL由为5个主要的部分组
2012-07-24 20:34:31
642
原创 STL学习笔记之 (一)模版
最近写了一堆的Qt程序,突然想要重新搞一遍STL。这一次要正规起来,认真做好笔记的记录工作。模版,template,出现的目的就在于减少程序员的工作量,将一些功能相似的函数或者类抽象出来,成为一个模板函数或者模板类。比如最简单的例子,实现交换两个数的函数swap。void swap(int& a, int& b){ int tmp = a; a = b; b = tmp;
2012-07-24 19:32:34
355
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人