摘要: 该博客通过代码来展示对二叉排序树的各种操作: 1 #include 2 #include 3 4 typedef int KeyType; 5 6 typedef struct Node 7 { 8 KeyType key;//关键字 9 struct Node... 阅读全文
posted @ 2015-06-02 17:37 海东青飞吧! 阅读(163) 评论(0) 推荐(0) 编辑
摘要: 一、顺序查找顺序查找比较简单,这里就不用代码实现了,其原理就是按顺序比较每个元素,直到找到关键字。其时间复杂度为O(n).二、二分查找(折半查找)原理是:查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过程结束;如果要查找的元素大于中间元素,则从数组大于中间元素的那一半查找;如果... 阅读全文
posted @ 2015-06-02 17:36 海东青飞吧! 阅读(220) 评论(0) 推荐(0) 编辑
摘要: 归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的,然后再把所有的有序子序列合并。2-路归并排序示例:2-路归并排序的核心操作是:将一维数组中前后相邻的两个有序序列归并为一个有序序列。其算法如下: 1 void Merge(Elemtyp... 阅读全文
posted @ 2015-06-02 11:21 海东青飞吧! 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 基本思想:选择一个基准元素,通过一趟排序将待排的记录分割成两个独立的部分,其中一部分记录的值均比基准元素小,另一部分均比基准元素值大。然后分别对这两部分用同样的方法进行排序。代码如下: 1 void Qsort(int a[],int low,int high) 2 { 3 if(low=k... 阅读全文
posted @ 2015-06-02 10:42 海东青飞吧! 阅读(183) 评论(0) 推荐(0) 编辑
摘要: 希尔排序又称“缩小增量排序”。它的基本思想如下:先将整个待排记录序列分成若干个子序列分别进行直接插入排序,等到整个序列中的记录“基本有序”了,再对全体记录进行一次直接插入排序。算法实现:我们这里简单处理增量序列:增量序列d={n/2,n/4,n/8....1}n为要排序数的个数。即:先将要排序的一组... 阅读全文
posted @ 2015-06-02 10:10 海东青飞吧! 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 下面我们来讲一下插入排序基本思想如下:将一个记录插入到已排序好的有序表中,从而得到一个新的有序表。实现要点,我们需要设立一个哨兵,作为临时存储和判断数组边界来用。直接插入的代码如下: 1 for(i=1;i=low;j--)15 {16 a[j]=a[j-1];//元素后移... 阅读全文
posted @ 2015-06-02 09:45 海东青飞吧! 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 上篇博客咱们讲了选择排序,不难发现,当数据较多时选择排序的效率就很低了。那么有没有另一种排序的方法可以提高一下效率呢?答案是肯定的。下面我们来讲一下冒泡排序。冒泡排序也是通过两重循环,外层循环和选择排序一样通过n-1次找最小(或最大)值,只是内循环的比较实现方式不同。它是通过n-1次找最大值得方式实... 阅读全文
posted @ 2015-06-02 09:09 海东青飞吧! 阅读(122) 评论(0) 推荐(0) 编辑
摘要: n个数的选择排序是一个两重循环的问题:外循环控制求最小值得次数,n个数求最小值,要用n-1循环;内循环是用来完成求最小值的过程,假定当前元素a[i]是最小值,假设内循环变量是j让a[i]与其后的所有元素a[j]逐个比较,i+1a[j]) 6 { 7 ... 阅读全文
posted @ 2015-06-02 08:57 海东青飞吧! 阅读(203) 评论(0) 推荐(0) 编辑