首页>计算机>软件水平考试>复习指导>正文
2010年下半年初级软考辅导:程序员数据结构笔记(三)

www.zige365.com 2010-7-10 16:11:49 点击:发送给好友 和学友门交流一下 收藏到我的会员中心
     排序查找是我自己觉得最头疼的算法了,常搞混去的啊.不知道各位学得如何,如果不错,还请告诉我一些经验!
  查找
  一、知识点/静态查找->数组
  1、什么是查找
  “动态查找->链树
  顺序查找,时间复杂度O
  折半查找:条件:有序;时间复杂度O
  索引查找:条件:第I+1块的所有元素都大于第I块的所有元素。
  算法:根据index来确定X所在的块(i)时间复杂度:m/2
  在第I块里顺序查找X时间复杂度:n/2
  总的时间复杂度:/2
  二叉排序树1)定义:左子树键值大于根节点键值;右子树键值小于根的键值,其左右子树均为二叉排序树。
  2)特点:中序遍历有序->(删除节点用到此性质)
  3)二叉排序树的查找:如果根大于要查找的树,则前左子树前进,如果根小于要查找的树,则向右子树前进。
  4)结点的插入->二叉排序树的构造方法
  5)结点删除(难点)1、右子树放在左子树的最右边
  2、左子树放在右子树的最左边
  avl树(二叉平衡树):左右子树高度只能差1层,即|h|<=1其子树也一样。
  B树:n阶B树满足以下条件1)每个结点(除根外)包含有N~2N个关链字。2)所有叶子节点都在同一层。
  3)B树的所有子树也是一棵B树。
  特点:降低层次数,减少比较次数。
  排序
  一、知识点
  1、排序的定义
  /内排序:只在内存中进行
  2、排序的分类
  “外排序:与内外存进行排序
  内排序:/直接插入排序
  1)插入排序
  “shell排序
  /冒泡排序
  2)交换排序
  “快速排序
  /简单选择排序
  3)选择排序堆
  “锦标赛排序
  4)归并排序(二路)
  5)基数排序(多关链字排序)
  3、时间复杂度(上午题目常考,不会求也得记住啊兄弟姐妹们!)
  1515
  /稳定1515
  排序
  “不稳定1515
  经整理得:选择、希尔、堆、快速排序是不稳定的;直接插入、冒泡、合并排序是稳定的。
  锦标赛排序方法:13161118213176
  “/“/“/“/
  131136
  “/“/
  113
  “/
  3(胜出,将其拿出,并令其为正无穷&GoOn)
  归并排序方法:13161118213176
  “/“/“/“/
  13,1611,183,216,17
  “/“/
  11,13,16,183,6,17,21
  “/
  3,6,11,13,16,17,18,21
  shell排序算法:1)定义一个步长(或者说增量)数组D[m];其中:D[m-1]=1
  2)共排m趟,其中第i趟增量为D[i],把整个序列分成D[i]个子序列,分别对这D[i]个子序列进行直接插入排序。
  程序如下:for
  }
  快速排序data
  di->13161118213176248<-j
  先从后往前找,再从前往后找。
  思想:空一个插入一个,i空j挪,j空i挪(这里的i,j是指i,j两指针所指的下标)。
  一次执行算法:1)令temp=d[0],i=0,j=n-1;
  2)奇数次时从j位置出发向前找第一个比temp小的元素,找到后放到i的位置i往后挪。
  3)偶数次时从i开始往后找第一个比temp大的数,(d[j]=d[i];j--;)
  4)当i=j时,结束循环。d[i]=temp;
  再用递归对左右进行快速排序,因为快速排序是一个典型的递归算法。
  堆排序
  定义:d[n]满足条件:d[i]<d[2i+1]&&d[i]<d[2i+2]大堆(上大下小)
  d[i]>d[2i+1]&&d[i]>d[2i+2]小堆(上小下大)
  判断是否为堆应该将其转换成树的形式。总共排序n-1次
  调整
  程序:flag=0;
  while
  }
  else
  flag=1;//是堆
  }
  堆排序过程:
  基数排序
  扑克:1)大小->分配
  2)花色->分配,收集
  思想:分配再收集.
  构建链表:链表个数根据关键字取值个数有关.
  例:将下面九个三位数排序:
  321214665102874699210333600
  定义一个有十个元素的数组:
  a[0]aaaaaaaaa

本新闻共2页,当前在第1页  1  2  

我要投稿 新闻来源: 编辑: 作者:
相关新闻