xmkk

导航

 

2013年9月10日

摘要: 一、简介:堆即子结点的键值或索引总是小于(或者大于)它的父节点的二叉树。堆排序就是先将序列构造成堆,再利用堆的性质,第一个元素即是最大(或最小)的元素,进行排序。二、代码 1、heapadjust函数,用于将序列调整为堆/*l是待排序的数组,这个函数是让l[s..m]成为一个大顶堆*/void heapadjust(int *l,int s,int m){ int i,temp; temp=l[s]; for(i=2*s;i=l[i]) //再比较堆顶元素和孩子节点中较大孩子的大小 break; l[s]=l[i];... 阅读全文
posted @ 2013-09-10 18:21 xmkk 阅读(940) 评论(0) 推荐(0) 编辑
 
摘要: 一、简介:希尔排序是对插入排序进行优化得来的一种排序方法,插入排序有两个缺陷影响其效率,一是、排序时间主要消耗在查找插入位置和移动上,当序列特别无序时,耗时 增多二是、当序列数目特别大时,效率降低。优化后,先将序列分拆后进行插入排序,让序列基本有序后,在进行一趟插入排序。 一个更好理解的希尔排序实现:将数组列在一个表中并对列排序(用插入排序)。重复这过程,不过每次用更长的列来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身仅仅对原数组进行排序(通过增加索引的步长,例如是用i += step_size而不是i++)。例如,假设有这样一组数[ 13 1... 阅读全文
posted @ 2013-09-10 13:26 xmkk 阅读(1021) 评论(0) 推荐(0) 编辑
 
摘要: 利用归并排序法对序列排序的示意图(递归法):一、算法分析:利用递归的分治方法:1、将原序列细分,直到成为单个元素;2、在将分割后的序列一层一层地按顺序合并,完成排序。细分通过不断深入递归完成,合并通过递归 一层层返回完成。二、C语言代码 1、完成排序的三个函数void MergeSort(int l[],int lenght){ int tmp[lenght]; MSort(l,tmp,1,lenght);}/*分:MSort将原来的序列不断细分,直到为1,再由Merge归并*/void MSort(int l[],int tmp[],int left,int right){... 阅读全文
posted @ 2013-09-10 00:01 xmkk 阅读(1627) 评论(0) 推荐(0) 编辑