摘要: 希尔排序(Shell Sort)又称为“缩小增量排序”。是1959年由D.L.Shell提出来的。该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率上比前两种方法有较大提高。具体做法:首先确定一组增量d0,d1,d2,d3,...,dt-1()其中n>d0>d1>...>dt-1=1),对于i=0,1,2,... 阅读全文
posted @ 2011-05-19 23:45 elwin 阅读(1853) 评论(0) 推荐(0) 编辑
摘要: 排序简介排序是数据处理中经常使用的一种重要运算,在计算机及其应用系统中,花费在排序上的时间在系统运行时间中占有很大比重;并且排序本身对推动算法分析的发展也起很大作用。目前已有上百种排序方法,但尚未有一个最理想的尽如人意的方法,本章介绍常用的如下排序方法,并对它们进行分析和比较。1、插入排序(直接插入排序、折半插入排序、希尔排序);2、交换排序(起泡排序、快速排序);3、选择排序(直接选择排序、堆排序);4、归并排序;5、基数排序;学习重点1、掌握排序的基本概念和各种排序方法的特点,并能加以灵活应用;2、掌握插入排序(直接插入排序、折半插入排序、希尔排序)、交换排序(起泡排序、快速排序)、选择排 阅读全文
posted @ 2011-05-19 22:14 elwin 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树的定义1.二叉树的递归定义 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树和右子树的二叉树组成。2.二叉树的五种基本形态 二叉树可以是空集;根可以有空的左子树或右子树;或者左、右子树皆为空。 二叉树的五种基本形态如下图所示。 3.二叉树不是树的特例(1)二叉树与无序树不同 二叉树中,每个结点最多只能有两棵子树,并且 阅读全文
posted @ 2011-05-19 22:13 elwin 阅读(326) 评论(0) 推荐(0) 编辑
摘要: 插入排序是最简单最直观的排序算法了,它的依据是:遍历到第N个元素的时候前面的N-1个元素已经是排序好的了,那么就查找前面的N-1个元素把这第N个元素放在合适的位置,如此下去直到遍历完序列的元素为止。 算法的复杂度也是简单的,排序第一个需要1的复杂度,排序第二个需要2的复杂度,因此整个的复杂度就是 1 + 2 + 3 + …… + N = O(N ^ 2)的复杂度。View Code 1 #include <iostream> 2 3 using namespace std; 4 5 void insertSort(int a[],int n) 6 { 7 int j,i,key; 阅读全文
posted @ 2011-05-19 21:20 elwin 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 1、算法思想分治发自顶而下实现归并排序:(1)分治法的三个步骤 设归并排序的当前区间是R[low..high],分治法的三个步骤是:①分解:将当前区间一分为二,即求分裂点②求解:递归地对两个子区间R[low..mid]和R[mid+1..high]进行归并排序;③组合:将已排序的两个子区间R[low..mid]和R[mid+1..high]归并为一个有序的区间R[low..high]。 递归的终结条件:子区间长度为1(一个记录自然有序)。(2)具体算法 void MergeSortDC(SeqList R,int low,int high) {//用分治法对R[low..high]进行二路归并 阅读全文
posted @ 2011-05-19 20:36 elwin 阅读(331) 评论(0) 推荐(0) 编辑
摘要: 已知数组int[] dec={0,5,2,9,7,4,3};用快速排序算法按升序对其进行排列,并返回数组算法过程 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一躺快速排序。一躺快速排序的算法是: 1)设置两个变量I、J,排序开始的时候:I=1,J=N; 2)以第一个数组元素作为关键数据,赋值给X,即 X=A[1]; 3)从J开始向前搜索,即由后开始向前搜索(J=J-1),找到第一个小于X的值,让该值与X交换; 4)从I开始向后搜索,即由前开始向后搜索(I=I+1),找 阅读全文
posted @ 2011-05-19 15:30 elwin 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 冒泡排序是一种交换排序。 交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时则进行交换,知道没有反序的记录为止。 应用交换排序基本思想的主要排序方法有:冒泡排序和快速排序。 冒泡排序:算法描述省略就了。。。 算法c实现: 1 #include <iostream> 2 using namespace std; 3 4 void bubbleSort(int a[],int n) 5 { 6 int i,j,tmp; 7 int exch = 0; 8 for(i = 0;i < n;i++) 9 {10 exch = 0; //交换标志11 for(j 阅读全文
posted @ 2011-05-19 15:29 elwin 阅读(205) 评论(0) 推荐(0) 编辑