2013教科版选修讲义1《排序》
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
排序法。 以下所有排序均为从
插入式排序
小到大升序排列
欲处理的数据两过于庞大,无法全部存放到内部存储 器,必须借助外部的辅助存储器(比如:硬盘), 由于数据是存在外存中,故数据不可随机被存取
外部排序
合并排序法 直接合并排序法
5.2交换式排序
内部排序中的交换式排序,是运用数据值比较后,以 判断规则对数据位置进行交换,已达到排序的目的。
2013教科版选修1《排序》
课程目标
• 何谓排序 • 交换式排序
– 冒泡排序法 – 快速排序法
• 选择式排序
– 选择排序法
• 插入式排序
– 插入排序法
本章体验项目——<家家乐彩票机>
本程序启动后,进入到彩票机的界面,在界面的又上角有一组单选框,分别是手选和机选(默认)。 如果是机选,则点击“开始”按钮生成一组1到30的随机数并显示在7个小文本框里(没有控制是否有重复 数)。点击“排序”按钮将7个数进行排序后并显示在界面中间的文本域中。 如果是手选,则自己在7个文本框中填写所喜欢的号码,然后点击“开始”按钮将7个号码排序后输出。 “清除”按钮是将显示区域的数据清除,“退出”按钮是退出程序。www.jinxiuhome.com www.exandis.com www.cheliang88.com
5.1 何谓排序
5.1.1排序的意义 所谓排序是将一组数据依照一定的顺序排列起来。最 常见的排序是“从小到大”的“递增排序”和“从大 到小”的“递减排序”。 以下列数组为例进行说明 递增排序:
递减排序:
5.1.2排序的特性
稳定性
排序过后能使值相同的数据保 持原顺序中的相对位置
不稳定性
排序过后不能使值相同的数据 保持原顺序中的相对位置
(2)a[1] VS a[2],因为a[1]<a[2],所以不能交换a[1]和a[2]。数组不变。 (3)a[2] VS a[3],因为a[2]>a[3],所以交换a[2]和a[3]。
(4)a[3] VS a[4],因为a[3]>a[4],所以交换a[3]和a[4]。
这样第一趟就比较完了,数组中最大的8也 到了最后一位,成为第一个吐出的泡泡。
在未排序的数组中任选一个记录作为基准,将数组分为左右两个 较小的子数组。左边的数组元素都小于基准,右边的数组元素都大于 基准,而该基准则位于正确的位置上。然后将两个子数组再使用递归 进行分解。这样不断的分解最后得到正确的排序。
Fra Baidu bibliotek如:
稳定排序的结果: 排序后7(1)仍旧在7(2)之前,二者相对位置不变
不稳定排序的结果: 排序后7(1)则在7(2)之后,二者相对位置发生了改变
5.1.2排序的分类
排序的分类大致上可分为两种
将欲处理的数据整个存放到内部存储器中
排序,数据可被随机存取
交换式排序
在本书中只介绍内部
内部排序 选择式排序
冒泡排序法(Bubble Sort)
交换式排序法又可分为两种 快速排序法(Quick Sort)
5.2.1冒泡排序法
排序方法 从数组第一个元素开始,将第一个元素a[i]同下一个
元素a[i+1]进行比较,如果a[i]大于a[i+1]则将两者相交换。 直到比较完最后一个元素。这时数组中最小的元素会被 交换成为数组首端。
按照这样的步骤继续循环直到所有元素都排 序完成为止。
public class BubbleSort
{
public void bubbleSort(int[] a)
{
int t=0;
for(int i=0;i<a.length-1;i++)
{
for(int j=i+1;j<=a.length-1;j++)
由于该比较法每次可以将最大或者最小的元素以交换 的方式移动到数组首或数组为,就像气泡从水底浮向水 面一样,到水面时气泡最大,故称该排序法为冒泡排序 法。
举例说明
如该数数组组:中i一nt共[] a有={56个,5数,8据,3,,7}所; 以要比较4趟,每趟相互比较4次。 第一趟(:1)a[0] VS a[1],因为a[0]>a[1],所以交换a[0]和a[1]
{ if(a[i]>a[j]) {
进行比较,如果前面的 元素比后面的大则交换
t=a[i];
a[i]=a[j];
a[j]=t; }
打印每一趟 排序的结果
for(int k=0;k<a.length;k++)
{
System.out.print(a[k]+" ");
}
System.out.println();
最坏状况:数据的顺序恰与排序后的顺序相反 如:5 4 3 2 1
5.2.2快速排序法
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它 采用了一种分治的策略,通常称其为分治法(Divide-andConquerMethod)。
分治法的基本思想是:将原问题分解为若干个规模更小但结构与 原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解 组合为原问题的解。 分解:
www.3-10000.com www.hbzhixing.com www.in-chimotion.com www.longshixun.com www.orbedlife.com www.rongfenghunli.com www.runcaring.com www.simourencai.com www.panasonicdy.com www.anhui2011.com www.avigaer.com www.hfteacoffee.com www.zuangyan.com www.jianlefei.com www.51syin.com www.ishangkm.com www.91jianjianfei.com www.52wgtd.com www.flz2.com www.bjlinshi.com www.ynszddc.com
}
System.out.println("----------------");
}
}
}
冒泡排序的优点和缺点
• 优点: 若数据已有部分排好序,则可以 很快的完成排序。
• 缺点: 会反复扫描数据,比较相邻的两 冒泡排序个属数于据稳,定速性度排不序快法也没有效率。
最佳状况:数据的顺序恰与排序后的顺序相同 如:1 2 3 4 5