计算机软件技术编程基础 排序.ppt

(40页)

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

19.90 积分

基本排序技术排序是将一个无序序列整理成非递减顺序排列的有序序列。稳定排序:排序过程中,相同关键字的元素的相对次序不变。不稳定排序:排序过程中,相同关键字的元素的相对次序发生变化。例如:34,12,34`,08,96 08,12,34, 34`,96 稳定 08,12, 34`,34,96 不稳定一 交换排序比较两个待排序纪录的关键字,若为逆序则相互交换位置,否则,保持原来位置不变。冒泡排序、快速排序1 冒泡排序基本思想:从前往后扫描,逐个比较相邻的两个元素,发现倒序即交换——直到将第N-1个纪录和第N个记录交换为止。51731694286原序列517316942861 53 71 76 74 92 98 96 9关键字最大的安置到最后从后往前扫描,将第N-1个纪录和前一个关键字进行比较,将小的放在前面,大的放在后面,依次类推,直到第2个记录和第1个记录交换为止。153167428696 82 42 71 31 52 6关键字最小的安置到最前面15316742869115326746893 52 54 76 7113256467894 64 52 3对剩余的线性表重复操作对线性表的每次来回操作都将最大的沉到表底,最小的像气泡冒到表头。1153267468911325646789112345667891531674286951731694286115326746891132564678911234566789012345678910void bub(int p[],int n){ int m,k,j,i; int d; k=0;m=n-1; //初始时子表表头k和表尾m位置 while(k=j;i--) if(p[i-1]>p[i]) {d=p[i];p[i]=p[i-1];p[i-1]=d;k=i;} } return;}待排数组数组长度while(k扫描无交换,表尾置0 for(i=k;i扫描,子表p[m+1]沉底 if(p[i]>p[i+1]) {d=p[i];p[i]=p[i+1];p[i+1]=d;m=i;}//m为该趟冒泡后子表表尾的位置 j=k+1;k=0; //如果=j;i--) //从p[i]) {d=p[i];p[i]=p[i-1];p[i-1]=d;k=i;}//k为该趟冒泡后子表表头的位置 }算法分析:稳定时间代价:需要进行比较的次数为2 快速排序1) 从无序表中选取一个元素T,对线性表进行分割,大于T的元素放在前表中,小于T的元素放在后表中。此时,线性表分成前后两个子表;2 )对分割的两个子表再进一步分割,直到所有的子表为空为止;无序线性表≤T≥TT分割分割分割i为表头位置; k 为表中位置; j为表尾位置比较大小,取中间值为分割元素t,该元素在表中的位置存放表头元素,将表头位置腾空;表尾位置前移(j--);该元素放入表头,表头位置后移(i++);P[j]>t从前往后扫描,p[i]P[i]<=t表头位置后移(i++);该元素放入表尾,表尾位置前移(j--) ;读入表尾元素;在一趟快速排序中,整个过程交替地从后往前扫描关键字值小的记录和从前往后扫描关键字值大的记录并放置到对应端空出的位置中,又空出新的位置。当从两个方向的扫描重合时,即i=j,就找到了基准记录的存放位置。 按照快速排序的基本思想,在一趟快速排序之后,需要重复(1),(2),直到找到所有记录的相应位置。快速排序是一个递归的过程。 快速排序算法是不稳定排序,对于有相同关键字的记录,排序后有可能颠倒位置。51731694286012345678910i=0;j=10;k=5;1731694286217316948621316978621431t=59786i=2t=52746插入排序 插入排序的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子表中的适当位置,直到全部记录插入完成为止。也就是说,将待序列表分成左右两部分,左边为有序表(有序序列),右边为无序表(无序序列)。整个排序过程就是将右边无序表中的记录逐个插入到左边的有序表中,构成新的有序序列。根据不同的插入方法,插入排序算法主要包括:直接插入排序、折半插入排序、表插入排序和希尔排序等。本章重点介绍简单插入排序、希尔排序。 简单插入法:将一个记录插入到已排好序的有序表中基本思想:将待排序表看成左右两部分,左边为有序区,右边为无序区;整个排序过程就是将右边无序区的元素插入到左边有序区中。(插入时,有序子表从最后一个元素开始,逐个向前与待插入元素比较)数据表a={12,5,4,9,5}从小到大排序12549512495512551295412544512591294591251295void insort(T p[],int n){ int j,k; T t; for(j=1;j=0)&&(p[k]>t)) //如果有序子表的元素大于待排序元素 { p[k+1]=p[k];//有序子表的元素后移 k=k-1;//向前寻找有序子表的下一个比较元素 } p[k+1]=t;//待排序元素插入到有序子表 } return;}【例】假设有7个待排序的记录,它们的关键字分别为23,4,15,8,19,24,15,用直接插入法进行排序。【解】简单插入排序过程如图所示。方括号[ ]中为已排好序的记录的关键字,有两个记录的关键字都为15,为表示区别,将后一个15加下划线。 简单插入排序 for (j=1;jdata data >=b的父结点的值,*s插入到b的右子树中80828575826871778875828085826871778856783445854536918478构造二叉排序树34845685783645459178如何定义结点?struct bsnode{ int d; bsnode *lchild,*rchild;};bsnode *insert_bs_tree(bsnode *bt, int x)二叉排序树的插入 insert_bs_tree( )传入的形参:根结点,插入元素insert_bs_tree(bsnode *bt, int x)返回值:根结点bsnode *insert_bs_tree(bsnode *bt, int x){bsnode *p,*q;定义两个结点构造一个新结点p=new(bsnode); p->d=x;p->lchild=NULL;p->rchild=NULL;建立一个搜索指针,从根结点开始搜索q=bt;如果二叉排序树为空,将新结点作为根结点if(bt==NULL) bt=p;如果二叉排序树不为空,将新结点插入到二叉树中else {while((q->lchild!=p)&&(q->rchild!=p)) {判断新结点是否插入到二叉树中if(xd) { if(q->lchild!=NULL) q=q->lchild; else q->lchild=p; }如果插入值小于搜索结点q的值1搜索结点q的左子树的结点已存在2搜索结点q的左子树为空如果插入值大于搜索结点q的值1搜索结点q的右子树的结点已存在2搜索结点q的右子树为空else { if(q->rchild!=NULL) q=q->rchild; else q->rchild=p; } } } return bt;}返回根结点二叉排序树的查找从二叉排序树的根结点开始与被查值进行比较,若等于根结点,则查找结束根结点,到右子树查找;void intrav(bsnode *bt){ if(bt!=NULL) { intrav(bt->lchild); cout

 天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

计算机软件编程应聘ppt,计算机软件技术编程基础 排序.ppt相关推荐

  1. 计算机ppt操作知识,计算机基础知识.ppt.ppt

    计算机基础知识.ppt 计算机应用基础教程 ----长泰电大 谢春发 计算机应用基础----目录 计算机基础知识 计算机基本操作 Windows98操作系统 Word97/2000 Excel97/2 ...

  2. 大一计算机课程ppt作业,大学生计算机基础作业PPT.ppt

    <大学生计算机基础作业PPT.ppt>由会员分享,可在线阅读,更多相关<大学生计算机基础作业PPT.ppt(11页珍藏版)>请在人人文库网上搜索. 1.蝴蝶,光明女神蝶,皇蛾阴 ...

  3. 计算机网络技术前景分析ppt,计算机网络技术发展与前景.ppt

    计算机网络技术发展与前景 G A B C E D F DNS服务器 交换机 交换机 PC1 互联网 PC2 PC3 PC4 路由器 路由器 调束藉官冕镶佐伟焰烃敛担俞我刮庇反铁炙孙恰糟衅间婆炭硼国陷陛 ...

  4. 大一计算机基础ppt练习题,大学计算机基础练习题.ppt

    大学计算机基础练习题 6-32. 在PowerPoint 2010中,若要把幻灯片的设计模板(即应用文档主题),设置为"行云流水",应进行的一组操作是_______. A.&quo ...

  5. 初一年级计算机基础知识ppt,七年级计算机基础知识.ppt

    七年级计算机基础知识 * Windows 98 启动与退出 启动: 开机 自检 设置用户口令 出现windows 桌面 退出: "开始" "关闭系统" &quo ...

  6. 计算机基础课ppt封面制作,计算机应用基础制作ppt课件

    多媒体演示文稿PowperPoint的制作 23 04 2020 2 本次课程所讲内容 PowerPoint的窗口界面幻灯片的基本设置制作幻灯片动画设置创建超级链接演示文稿的放映 23 04 2020 ...

  7. 数控计算机软件的确认表怎么做,[计算机软件及应用]单元3 数控编程基础.doc

    [计算机软件及应用]单元3 数控编程基础 单元3 数控编程基础 一.教学目的: 理解并掌握数控机床的坐标系统的规定,理解对刀理论,掌握数控机床常用数控加工指令.刀具半径补偿功能.子程序功能. 二.教学 ...

  8. 面试难,应聘难,好工作,今安在?——《编程之美——微软技术面试心得》为你探路!即将上市,敬请关注!

    这本书是我目前所见到的优秀面试试题的最全集,包含大量有趣且有启发性的题目,一方面对于学生的指导意义重大,另一方面,即使对于我们这些已经工作的人来说,也不失为一本充满智慧与趣味的好书."    ...

  9. 计算机课做ppt的软件有哪些内容,课程内容计算机软件的基础知识.ppt

    <课程内容计算机软件的基础知识.ppt>由会员分享,可在线阅读,更多相关<课程内容计算机软件的基础知识.ppt(15页珍藏版)>请在人人文库网上搜索. 1.数据结构,课程内容: ...

最新文章

  1. C语言的32个关键字
  2. C#设计模式系列:访问者模式(Visitor)
  3. 转载:vs2010 问题 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  4. 【Android RTMP】x264 图像数据编码 ( Camera 图像数据采集 | NV21 图像数据传到 Native 处理 | JNI 传输字节数组 | 局部引用变量处理 | 线程互斥 )
  5. Selenium for C#的入门Demo
  6. 带有Spring Cloud Config和JHipster的Java微服务
  7. pythonsample_python sample code | 学步园
  8. Smobiler实现手机弹窗
  9. 两种求矩阵伪逆的方法
  10. Xcode 报错及解决办法汇总
  11. DCM protocol Diagnostic session
  12. 项目docker容器化部署步骤
  13. 【多线程】(二)Java.lang.Process的思考
  14. 史上最全体检表、检验报告解析
  15. nn.Softmax(dim) 的理解
  16. 面试官:说说MySQL中IN和OR的查询效率和区别
  17. Lintcode - kth largest element
  18. Linux下的SQLite数据库的基本使用
  19. 计算机基础应用win7,计算机应用基础WIN7第一章.ppt
  20. glew和glfw区别

热门文章

  1. 分块算法:莫队(持续更新)
  2. git Please move or remove them before you can merge
  3. 网站添加“分享按钮”
  4. xml文件中的resultMap
  5. 历经千辛万苦的Ubuntu20.04与Geomagic Haptic相联(成功一半)
  6. 千鸟弹幕机器人_千鸟熊猫TV直播弹幕机器人软件下载
  7. 看了此文还不懂傅里叶变换,你来掐死我吧
  8. 楚留香手游系统互通的服务器,楚留香手游安卓苹果互通吗 苹果和安卓能一起玩吗...
  9. 最右技术问答的一点个人见解
  10. 220112-3步Word双栏排版图表单栏置顶居中