数据结构与算法
亲亲洛安
这个作者很懒,什么都没留下…
展开
-
堆排序算法
堆排序基本思想 将待排序的序列构造成一个大顶堆,此时整个序列的最大值就是堆顶的根节点,将其移走(即与**堆数组**的末尾元素交换,此时末尾元素就是最大值),然后将剩余n-1个序列重新构造成一个大顶堆,重复此过程,得到一个有序序列。原创 2016-01-15 21:22:04 · 219 阅读 · 0 评论 -
快速排序算法及其优化
快速排序 快速排序基本思想 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,达到整个序列有序。 void QSort(SqList *L,int low,int high) { }原创 2015-12-29 16:40:53 · 373 阅读 · 0 评论 -
归并排序
归并排序算法的思想 2路归并排序:假设原始序列含有n个记录,则把它们看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到【n/2】(不小于n/2的最小整数)个长度为2或者1的有序子序列;再两两归并,……,如此重复,知道得到一个长度为n的有序序列为止。 void MergeSort(SqList *L) { Msort(L->r,L->r,1,L->length); }原创 2015-12-30 09:44:16 · 336 阅读 · 0 评论 -
查找(顺序查找、折半查找、斐波那契查找)
//顺序查找,a为数组,n为要查找的数组长度,key为要查找的关键字 void Sequential_Search(int *a, int n, int key) { int i; for(i=1;i<=n;i++) { if(a[i]==key) return i; } return 0; } //有哨兵顺序查找 void原创 2016-03-16 11:01:31 · 300 阅读 · 0 评论 -
二叉排序树的查询、插入和删除操作
//二叉排序树查找 //创建二叉树的结点结构定义 typedef struct BiTNode { int data; struct BiTNode *lchild, *rchild; }BiTNode,*BiTree; //递归查找二叉排序树T中是否存在key //指针f指向T的双亲,其初始调用值为NULL //若查找成功,则指针p指向该数据元素结点,并返回TRUE //若查找原创 2016-03-16 21:54:47 · 454 阅读 · 0 评论 -
希尔排序算法
希尔排序是第一批突破O[n*n]复杂度的算法之一,采用跳跃分割的策略,使待排序的记录基本有序。 void ShellSort(SqList *L) { int i,j; int increment = L->length; do { increment = increment/3+1; //增量序列 for(i=in原创 2016-03-14 21:20:28 · 210 阅读 · 0 评论 -
直接插入、简单选择、冒泡排序
直接插入排序:直接插入排序的基本操作是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。void InsertSort(SqList *L) { int i,j; for(i=2;ilength;i++) { if(L->r[i]r[i-1]) { L->r[0]=L->r[i];原创 2016-03-15 10:49:27 · 220 阅读 · 0 评论