Java:工具类与算法-习题课分解.ppt

习题1:扩展应用-算命系统 见演示 习题二:切高筋拉面 对折1次,2根 对折2次,5根 对折3次,?根 习题二:扩展 养猪,养鸡场的预测系统。 习题三:点名系统 需求分析: 设计能自动选择学生的姓名的软件 功能分析: 能随机产生学生姓名 根据姓名能语音播放 姓名在产生的时候能滚动效果 优美的UI 开发步骤 第一步:能读取文件的名字信息 第二步:能随机生成某个名字 第三步:添加简单的UI 第四步:添加语音播放功能,进一步美化UI界面 UML简介 * * * 工具类与算法(习题) 蒋和松 Email:hsongjiang1982@ Tel第九讲:课本第6章 Collection 接口 表示一组对象,有些允许重复,有些不允许 ,有些有序,有些无序 Set 接口 继承 Collection 不允许重复 List 接口 继承 Collection 允许重复,以元素安插的次序来放置元素,不会重新排列 回顾:集合框架中的主要接口 * Collection Set List Map Map接口 存放键-值对象 不能有重复的key 各类集合容器图示 * 4 3 7 5 6 1 4 1 2 1 2 K3-v2 K1-v1 K2-v1 K4-v3 集       列表      映射 《例》求 n 阶乘的递归方程如下: long Factorial(int n) { if (n==1) return 1; else return n*Factorial(n-1); } 6.6 递 归 解题步骤: 1)划分为两步:一个确定的算法、以及求范围缩小的同性质问题的解; 例如: n! = n (n-1)! 。 2)求递归头:即最简单情况下问题的解。 如: 1! = 1 。 课堂练习(1) 【程序1】 ? 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 6.7 排序 冒泡排序 选择排序 插入排序 6.7.1 冒泡 排序 基本思想:将当前序列中的各相邻数据两两比较,如不符合所要求的升序或降序关系,则交换顺序; 《例6-6》BubbleSort .java 6.7.2 选择排序 基本思想:把数据序列分成两个子序列,一个有序,一个无序。开始时有序子列为空。以升序为例,每次从无序子列中选择一个最小数据加至有序子列中。 《例6-7》SelectSort .java for (pass=0; passDataArray.length-1; pass++) { for (i=pass+1,k=pass; iData.length; i++) if (DataArray[i]DataArray[k]) k = i; 6.7.3 插入排序 基本思想:把数据序列分成两个子序列,一个有序,一个无序。开始时有序子列为空。每次将无序子列中固定位置(如最前面)的数据插入至有序子列中的合适位置。 《例6-8》InsertSort .java temp = DataArray[pass]; for (i=pass-1; i=0; i--) if (DataArray[i] = temp) break; else DataArray[i+1] = DataArray[i]; DataArray[i+1] = temp; 各排序方法的 比较 冒泡算法简单,但代价高,运算次数为 O(n3) 数量级。 选择排序与插入排序为 O (n2) 数量级。 6.7.4 利用系统类实现排序 Arrays对象的sort方法: public static void sort(int[] a); 6.8 查 找 顺序查找 对分查找 注:适合于已排序的序列。 while( low = high) { mid = (high+low)/2; if (DataArray[mid]==key) return mid; else if (DataArray[mid] key) low = mid+1; else high = mid-1; } 6.8.2 利用系统实现查找 public static int binarySearch(int[ ] a,int key); 查找在现实中应用? 6.9 链 表 链表与数组的比较: (1)数组元素顺序、连续存放;链表节点通过指针连接。 (2)在数组中进行数据插入和删除涉及大量数据移动;而链表的数据插入和删除却十分方便。 链表的组成:

文档评论(0)

1亿VIP精品文档

相关文档