1. 1、本文档共25页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《排序》.ppt

第五章 排序 课程目标 何谓排序 交换式排序 冒泡排序法 快速排序法 选择式排序 选择排序法 插入式排序 插入排序法 本章体验项目——家家乐彩票机 本程序启动后,进入到彩票机的界面,在界面的又上角有一组单选框,分别是手选和机选(默认)。 如果是机选,则点击“开始”按钮生成一组1到30的随机数并显示在7个小文本框里(没有控制是否有重复数)。点击“排序”按钮将7个数进行排序后并显示在界面中间的文本域中。 如果是手选,则自己在7个文本框中填写所喜欢的号码,然后点击“开始”按钮将7个号码排序后输出。 “清除”按钮是将显示区域的数据清除,“退出”按钮是退出程序。 5.1 何谓排序 5.1.1排序的意义 所谓排序是将一组数据依照一定的顺序排列起来。最常见的排序是“从小到大”的“递增排序”和“从大到小”的“递减排序”。 以下列数组为例进行说明 5.1.2排序的特性 5.1.2排序的分类 5.2交换式排序 内部排序中的交换式排序,是运用数据值比较后,以判断规则对数据位置进行交换,已达到排序的目的。 5.2.1冒泡排序法 排序方法 从数组第一个元素开始,将第一个元素a[i]同下一个元素a[i+1]进行比较,如果a[i]大于a[i+1]则将两者相交换。直到比较完最后一个元素。这时数组中最小的元素会被交换成为数组首端。 由于该比较法每次可以将最大或者最小的元素以交换的方式移动到数组首或数组为,就像气泡从水底浮向水面一样,到水面时气泡最大,故称该排序法为冒泡排序法。 举例说明 如数组:int[] a={6,5,8,3,7}; 这样第一趟就比较完了,数组中最大的8也到了最后一位,成为第一个吐出的泡泡。 按照这样的步骤继续循环直到所有元素都排序完成为止。 public class BubbleSort { public void bubbleSort(int[] a) { int t=0; for(int i=0;ia.length-1;i++) { for(int j=i+1;j=a.length-1;j++) { if(a[i]a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } for(int k=0;ka.length;k++) { System.out.print(a[k]+ ); } System.out.println(); } System.out.println(----------------); } } } 冒泡排序的优点和缺点 优点: 若数据已有部分排好序,则可以 很快的完成排序。 缺点: 会反复扫描数据,比较相邻的两 个数据,速度不快也没有效率。 5.2.2快速排序法 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。 分解: 在未排序的数组中任选一个记录作为基准,将数组分为左右两个较小的子数组。左边的数组元素都小于基准,右边的数组元素都大于基准,而该基准则位于正确的位置上。然后将两个子数组再使用递归进行分解。这样不断的分解最后得到正确的排序。 具体的算法: 假设有n个数据a[0]~a[n-1] 设立标志L=a[0]=m;指向第1个位置a[0],i=0 标志R=a[n-1];只想第n个位置a[n],j=n 步骤1 :L往右找,直到找到比L值大时停止,假设停止于a[i] R往左找,直到找到比R值小时停止,假设停止于a[j] 此时可能有两种状况: 如果(ij)那么将a[i]与a[j]的内容相交换 如果(i≥j)那么将此数组的第一个元素m和a[j]相交换,交 换后的m已经找到其所在的位置,并将数组切割成两部分, 其左边数据均小于m,其有边数据均大于m。 步骤2 :每次被分割的分区再分别设立L及R标志,重复步骤1。直到 所有分区排序完成。 public void quickSort(int[] a,int left,int right,int index) { int i,j; int m,temp; i = left; j = right; m = a[left]; do { while((a[i]m) (iright)) { i++; }

文档评论(0)

2837587390 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档