数据结构JAVA版.ppt

上传人:京东小超市 文档编号:6109414 上传时间:2020-09-11 格式:PPT 页数:34 大小:802KB
返回 下载 相关 举报
数据结构JAVA版.ppt_第1页
第1页 / 共34页
数据结构JAVA版.ppt_第2页
第2页 / 共34页
亲,该文档总共34页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《数据结构JAVA版.ppt》由会员分享,可在线阅读,更多相关《数据结构JAVA版.ppt(34页珍藏版)》请在三一文库上搜索。

1、The course of elaboration for Data Structures 撮 岔 掳 池 柔 裔 径 旭 候 梦 碘 亮 妈 掉 帛 剔 什 震 侮 维 昌 娇 陪 丘 敞 绊 逮 稳 藉 俱 按 磐 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 数据结构(JAVA 版) www.YT_JAVA.com 烟台职业学院精品课 值 氨 稽 澄 疵 怜 精 乡 督 宵 吊 胚 裂 膜 力 瘩 馏 嚼 饲 怒 紫 替 瀑 捕 召 配 乐 姬 柿 完 娄 菠 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 第八章 排序 何谓排序1 交换

2、排序2 选择排序3 插入排序4 合并排序5 抓 堆 将 镇 修 绘 菱 获 宽 磋 廖 追 顿 薛 数 曙 它 陀 拍 沫 痔 炕 贞 了 浓 除 壤 叛 馋 炬 呼 割 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 81 排序 v 排序是将一组杂乱无章的数据重新排列成按照关键字有序的 序列 v 排序算法的稳定性 如果有两个数据元素ri 和rj ,他们关键字ki等于 kj,且排 序前ri位于rj之前。若排序后,元素ri仍在rj之前,则称这样 的排序算法是稳定的,否则就是不稳定的。 v 内部排序与外部排序 内部排序:在待排序的数据序列中,元素的个数较少, 排序整个过程所

3、有的元素都保留在内存。 外部排序:待排序的数据很多,排序过程中数据要不断 的内外存数据交替存取。 这里我们重点介绍的是内部排序 v 排序算法的性能评价 算法的时间复杂度:算法执行中,数据的比较次数、移 动次数与数据个数的关系 算法的空间复杂度:算法执行中,除待排序数据本身所 占用的内存空间外,需要附加内存空间与数据元素个数的关 系 鹤 涛 翁 茶 芜 棕 讽 达 潞 搭 呐 馏 坪 柿 书 束 锣 慢 幼 绿 抨 昼 氢 羽 滚 讲 盏 尿 碉 瘴 香 除 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 82 交换排序 冒泡排序 (Bubble Sort) 交换排序 快

4、速排序 (Quick Sort) 兹 碧 砧 饥 键 淆 炽 寄 镀 淖 余 孤 炼 萝 伴 舀 赫 幌 妄 拈 唯 受 耪 缆 驱 球 拒 湛 羔 般 会 霸 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 821 冒泡排序 v 排序方法 将相邻的两个数据按关键字进行比较。若反序则交换 ,经一趟排序后,最大的值移到最后的位置,再对上面 的元素重复刚才的操作,直到剩下一个元素为止。 v 算法分析 该算法最好的情况是已排序好的数据,只需一趟排序 即可,比较次数为n,没有移动。最坏情况是反序的数 据序列,需要n-1趟排序,比较次数和移动次数都是 (n2)因此,此算法的时间复

5、杂度是(n2)。 冰 僧 湾 车 毒 迢 涧 械 祸 恐 誓 艰 嗜 坞 斤 疏 惫 搅 整 蹲 劫 太 私 欠 萧 考 漳 草 沈 每 旨 涌 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 821 冒泡排序 v 实例 墅 舀 屯 豢 晚 恭 顺 猜 幸 兹 撩 修 糕 抬 蔑 趣 棠 骆 裂 目 颧 努 谍 稚 鞋 乃 簧 蛹 档 樱 蔚 仰 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 821 冒泡排序 v 程序实现 public static void BubbleSort(int Index) int i,j,k; /循环计数变量 b

6、oolean Change; /数据是否有改变 int Temp; /数据暂存变量 for (j = Index ; j1; j-) /外层循环 Change = false; /设置为数 据未改变 for (i=0;jj-1;j+) /内层循环 /比较两数值 if(Datai+1Datai) 复 炯 涂 战 班 崖 锈 牡 突 好 桨 突 冒 堑 晌 颇 管 曾 舌 宋 反 邻 且 率 诉 嘉 滞 钎 搂 胸 啼 恃 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 821 冒泡排序 / 交换两数值 Temp = Datai+1; Datai+1 = Datai; Da

7、tai = Temp; Change = true; /设置数据已改变 if(Change) /如果数据已改变则输出结果 /打印目前排序状况 System.out.print(Current Sorting Result :); for(k=0;kIndex;k+) System.out.print( +Datak+ ); System.out.println(); 刺 床 县 铅 顷 番 态 他 税 柠 阀 篱 豺 抡 要 瓮 坯 铆 篮 诗 掣 硬 凰 搅 匡 又 糕 渐 甭 调 耽 废 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 8.2.2 快速排序 v 算法

8、思想 在待排序的数据中选一个数据作为基准,由序列的两边交替地向中间比较 、交换,使得所有比基准小的元素都处于序列的左端,比基准大的元素都处 于序列的右端,这样序列就被划分成两个子序列。再对两个子序列分别进行 同样的操作,直到子序列的长度为1为止。 v 实例 般 请 稍 迫 钠 御 贩 觅 努 筏 赋 猴 鞘 偿 垫 拽 财 蹲 矣 田 和 察 衅 异 佑 俊 询 活 凌 覆 卵 昏 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 8.2.2 快速排序 v程序实现 public static void QuickSort(int left,int Right,int In

9、dex) int i,j,k; /循环计数变量 int Pivot; /枢纽变量 int Temp; /暂存变量 i=Left; /设定左指针 j=right+1; /设定右指针 Pivot=DataLeft; /取最左边的元素 if (ij) do do /从左往右找比Pivot大的值 i+; while ( Datai=Pivot 漓 雨 馋 汀 懒 捂 低 安 萍 顿 君 辊 蠢 氮 佳 跨 芳 竣 末 忘 忻 窍 坑 它 危 缺 距 朗 泣 叔 诬 唆 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 8.2.2 快速排序 if(ij); if(ij) Temp=

10、Datalefe; /交换DataLeft和Dataj DataLeft=Dataj; Dataj=Temp; /打印目前排序结果 System.out.print(“Current sorting result;”); for(k=0;kIndex;k+) System,out.print(“”+Datak+”); System,out.println(“”); QuickSort(Left,j-1,Index); /排序左半边 QuickSort(j+1,Right,Index); /排序右半边 帧 骑 楚 饰 瞥 晓 挎 闹 莎 窘 源 佬 御 略 馈 副 算 排 醉 予 经 券 忧 差

11、 漏 弛 号 卒 去 寨 努 灿 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 8.2.2 快速排序 v算法分析 快速排序是目前平均性能较好的一种排序方 法。时间复杂度为(nlog2n)。最好情况是 ,每趟排序后将序列分成两个长度相同的子序 列。最坏情况是,当序列已排好序。此时时间 复杂度为(n2),比直接插入排序还慢。 快速排序是不稳定的算法,另外它是递归算 法,所以运行时,系统需要设立一个工作栈。 鬃 监 脯 请 贺 臻 歉 任 盂 部 载 越 涕 嚣 枣 阜 波 逗 茨 嚷 募 洁 恋 堵 捞 忽 插 惹 獭 质 捷 佑 数 据 结 构 J A V A 版 数

12、据 结 构 J A V A 版 83 选择排序 简单选择排序 (Sinple Selection Sort) 选择排序 堆排序 (Heap Sort) 裤 诵 沉 啃 颁 熊 苟 倚 巧 乃 陆 妨 妈 譬 帘 膀 漓 兼 倪 骇 茶 岳 轧 段 凳 氧 慈 钵 穆 笨 霞 筹 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 831 简单选择排序 v 算法思想 假设待排序的数据序列有n个元素,第一趟,比较n个元素, 选择关键字最小的元素,跟第一个元素交换;第二趟,在余下的n -1个元素中选择关键字次小的元素与第二个数据交换经过n- 1趟排序就完成。 v 实例 塌 甘 宅

13、 佐 端 裤 礼 镣 迁 正 浆 威 投 赴 腮 魂 栓 生 襄 脾 迈 袜 泵 蔬 宰 豌 僵 弥 傅 题 灶 嫉 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 831 简单选择排序 v 程序实现 Public static void selectsort(int index) Int I,j,k; /循环计数变量 Int minvalue; /最小值变量 Int intdexmin; /最小值下标变量 Int temp; /暂存变量 For(i=o;iindex -1;i+) MinValue=32767; /目前最小数值 IndexMin=0; /存储最小数值的

14、下标量 for (i=0;IIndex;j+) If(DatajMinValue) /找到最小值 MinValue=dataj; /存储最小值 IndexMin=j; 顿 翱 竿 蓑 砒 攀 卡 彰 朴 工 钢 霖 铅 驼 榜 窜 茄 乃 搅 了 域 非 匹 翻 豪 的 腔 柏 度 桶 铜 堰 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 831 简单选择排序 Temp=Datai /交换两数值 Datai=DataIndexMin; DataIndexMin=Temp; System.out.print(“Current sorting result:”); For

15、(k=0;k=heapj) finish=1; /堆建立完成 Else Heapj/2=temp; /父节点=目前节点 J=2*j; Heapj/2=temp; /父节点=Root值 硬 垄 怎 帘 惮 旁 疤 钠 瘸 滨 邮 哼 索 蛙 逛 姬 廉 技 活 娘 执 忱 嚷 铺 遥 肋 怯 可 针 浸 鹅 郧 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 8.3.2 堆排序之堆排序程序 Public static void heapsort(int index) Int I,j,temp; /将二叉树转成堆 For(i=(index/2);i=1;i-;) Creat

16、eheap(I,index); /开始进行堆建设 for(i=index/2);i=1;i-) Temp=heapi+1; /堆的Root值和最后一个值交换 Heapi+1=heap1; Heapi=temp; createheap(1,i); /对其余数值重建堆 /打印堆的处理过程 system.out.print(“sorting process:”; for(j=1;j=index;j+) system.out.print(“ “+heapj+” “); system.out.print(“ “); 型 大 刀 措 顺 锗 诀 怖 焦 蔚 驾 明 昔 鞠 醚 时 会 怒 光 驾 咱 茁

17、肉 场 妄 术 便 窗 妆 垂 役 槐 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 8.4 插入排序 1 直接插入排序 Straight Insertion Sort 2 希尔排序 Shell Sort 3 二叉树排序 Binary_tree Sort 翠 陀 理 刹 隅 徐 百 畜 鞋 保 服 腾 甥 护 蛛 猫 超 捻 阳 臻 狡 鬃 协 稼 耶 园 牲 粳 矮 蕴 刨 釜 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 841 直接插入排序 v 排序方法 从第二个元素开始依次将每个元素插入到前面有序 的序列中,经过n-1次完成。 v 实

18、例 盆 苦 盔 齿 窄 秽 诗 鸡 忻 涡 议 底 敲 鼎 铅 霞 柬 佯 计 褥 印 瞩 廊 尿 谣 孪 译 艰 软 常 希 掺 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 841 直接插入排序 v程序实现 public static void insertsort (int index) int I, j, k; /循环计数变量 int insertnode; /欲插入数据变量 for(I=1;I=0 j-; dataj+1=insertnode; /将数值插入 /打印目前排序结果 system.out.print(“current sorting result

19、 :”); for(k=0;kindex;k+) system.out.print(“ “+datak+” “); system.out.println(“ “); 尽 攫 禾 吻 嘻 锐 蟹 动 一 酚 然 劣 抹 刮 甲 斌 乍 牌 厕 惹 互 亡 肥 置 声 断 岩 户 祁 讲 购 嘲 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 841 直接插入排序 v算法分析 直接插入排序的时间复杂度为(n2);空间复 杂度为(1);当数据已经有序情况下为最好的情况 ,时间复杂度为(n)。 v算法改进 对于直接插入排序算法的基础上,从减少比较和移动 的次数着眼,改进算法.例

20、如,由于插入排序的基本操作是 在一个有序表中进行查找和插入的,这个查找可以利用” 折半查找”来实现. 真 枣 碎 炒 岁 拐 乓 溅 凋 衙 烙 鼻 贤 迅 记 发 兆 兹 拇 鼠 饮 笑 汇 钮 禄 猜 铃 闻 诵 盏 诊 院 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 8.4.2 希尔排序(Shell Sort) v算法思想 先将整个待排序数据序列分割成为若干子序列分别 进行插入排序,待整个数据“基本有序”时,再对全体记 录进行一次直接插入排序。 v算法分析 Shell Sort排序是以插入排序进行排序, 由于插入排序对已排好的部分会快速处理。 Shell So

21、rt排序时间复杂度为(nlog2n) ,空间复杂度为(1),不稳定的排序算法。 嵌 鳃 契 坯 伏 乃 妄 胆 贞 危 绢 堑 凶 微 核 闸 灿 娄 匙 米 彤 短 妇 输 狂 化 搀 蚤 善 迭 狄 社 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 8.4.2 希尔排序(Shell Sort) 蔽 砍 摩 桌 怀 坏 虱 淄 预 汕 蛾 植 柔 菱 烈 恋 萌 伶 蕴 房 银 因 氢 葱 儡 鲍 臃 歉 糯 骑 杉 澡 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 8.5 合并排序 1.算法思想 合并排序就是将两个有序的数据序列合并,生成

22、 一个有序的序列,又称两路归并。 两路归并排序算法描述如下: 将初始序列看成是由n个长度为1的已排序子序列组成; 反复将两个子序列合并成一个已排序的序列; 重复上步,直到合并成一个序列. 2.算法分析 合并排序算法是可用来处理大量数据的排序 ,属于稳定的排序,空间复杂度是(n),时间 复杂度为(nlog2n)。 围 头 谈 撬 丫 欧 渊 趋 器 豁 镁 礁 驯 镐 勇 酥 蔼 匆 煮 席 操 鹤 死 剿 绒 轰 蔼 凰 屯 恳 豺 莆 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 8.5 合并排序 v 实例 牲 疙 爪 轴 惮 误 辨 菩 宴 捶 滁 砌 修 舷 煤

23、 床 彪 皱 囱 略 俗 囚 狡 俐 贼 私 尉 哭 澜 捉 惶 格 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 The course of elaboration for Data Structures 撮 岔 掳 池 柔 裔 径 旭 候 梦 碘 亮 妈 掉 帛 剔 什 震 侮 维 昌 娇 陪 丘 敞 绊 逮 稳 藉 俱 按 磐 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版 烘 腆 场 摈 泛 穗 蔼 邢 舌 俄 涌 莲 纹 秀 资 规 扼 晶 朗 鸟 除 琢 徽 傣 记 旭 燎 根 稼 瘁 防 珍 数 据 结 构 J A V A 版 数 据 结 构 J A V A 版

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1