冒泡排序法、选择排序法、插入排序法(java案例详解)
1.冒泡排序法
/**
*功能:冒泡排序法
*思想:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,
*,若发现逆序这交换,使得排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标)
*较小的单元,,就像水底下的气泡一样逐渐向上冒。
*作者:徐守威
*/
package com.xushouwei;
public class T4 {
/**
*@param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr1[]={1,6,0,-1,9,-100,90};
//开始排序,创建一个Bubble类
Bubble bubble=new Bubble();
bubble.sort(arr1);
//输出最后结果
for(int i=0;i { System.out.print(arr1[i]+" "); } } } //定义一个Bubble类 class Bubble { //排序方法 public void sort(int arr[]) { //第一层循环用来指定排序的次数 //定义一个临时变量来存放交换的值 int temp=0; for(int i=0;i { //内层循环开始逐一比较,如果我们发现前一个数比后一个数大,这交换 for(int j=0;j { //进行前后比较 if(arr[j]>arr[j+1]) { //交换位置 temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } } } 2.选择排序法 /** *功能:选择排序法 *思想:第一次从R[0]-R[N-1]中选取最小值,与R[0]交换,第二次从 R[1]-R[N-1]中选取最小值,与R[1]交换, *第三次从R[2]-R[N-1]中选取最小值,与R[2]交换...第i次从 R[i]-R[N-1]中选取最小值,与R[i-1]交换, *第n-1次从R[n-2]-R[N-1]中选取最小值,与R[n-2]交换,总共通过n-1 次,得到一个按排序码从小到大排列的 *有序序列。 *作者:徐守威 */ package com.xushouwei; import java.util.*; public class T5 { /** *@param args */ public static void main(String[] args) { // TODO Auto-generated method stub int len=100000; int[] arr=new int[len]; for(int i=0;i { //让程序随机产生1-10000的数 //Math.random()可以产生一个0~1的数 int t=(int)(Math.random()*10000); arr[i]=t; } int arr1[]={1,6,0,-1,9,-100,90,10,15,-10}; //开始排序,创建一个Select类 Select select=new Select(); //在排序前打印系统时间,getInstance表示得到一个实例 Calendar cal=Calendar.getInstance(); System.out.println("排序前时间:"+cal.getTime()); select.sort(arr); //重新获得时间,相当于把时间刷新 cal=Calendar.getInstance(); System.out.println("排序后时间:"+cal.getTime()); //输出最后结果 /*for(int i=0;i { System.out.print(arr1[i]+" "); }*/ } } //定义一个Select类 class Select { //选择排序 public void sort(int arr[]) { //定义一个临时变量来存放交换的值 int temp=0; for(int j=0;j { //假设第一个数是最小的 int min=arr[j]; //定义最小下标 int minIndex=j; for(int k=j+1;k { if(min>arr[k]) { //修改 min=arr[k]; minIndex=k; } } //但退出内循环后就找到这次的最小值 temp=arr[j]; arr[j]=arr[minIndex]; arr[minIndex]=temp; } } } 3.插入排序法 /** *功能:插入排序法 *基本思想:把n个待排序的元素看成一个有序和无序表,开始时有序表中只包含一个元素, *无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码 *依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有 *序表。 *作者:徐守威 */ package com.xushouwei; public class T6 { /** *@param args */ public static void main(String[] args) { // TODO Auto-generated method stub //定义需要排序的数组 int arr1[]={1,6,0,-1,9,-100,90,10,15,-10}; //开始排序,创建一个Select类 InsertSort insertsort=new InsertSort(); //调用方法开始排序 insertsort.sort(arr1); //输出最后结果 for(int i=0;i { System.out.print(arr1[i]+" "); } } } //定义一个InsertSort类 class InsertSort { //插入排序法 public void sort(int arr[]) { for(int i=1;i { //定义一个准备被插入的数 int insertVal=arr[i]; //定义插入的位置,即要准备和前一个数比较 int index=i-1; //判断如果插入的位置>=0并且被插入的数 while(index>=0&&insertVal { //将把arr[index]向后移动一位 arr[index+1]=arr[index]; //让index向前移动一位 index--; } //将insertVal插入到适当位置 arr[index+1]=insertVal; } } } 一道常考的javaSE面试题 上周一,.NET班有四个同学去面试,面试题是一道排序题,不管用什么方式做出结果就行。 就这道题我也想些想法,当时他们和我说完,我在想用什么方法可以实现。毕竟现在javaSE都忘的差不多了,现在主要学的还是javaEE方面。年前学习JSP和SERVLET一片的知识,到了年后主要学习三大框架、ajax、jquery和XML等。不过当时出现脑中的算法只有:java.util包中定义的Arrays类和冒泡法。 下面就拿上面方说的那两种方法具体说说。 在JDK的java.util包中定义的Arrays类提供了多种数据操作方法,实现了对数组元素的排序、填充、转换、增强检索和深度比较等功能,所以的这些方法都是static的,下面介绍对数组元素进行排序的方法。数组元素的排序通常是指一维数值型数组元素按升序排序,偶尔也会涉及一维String数组排序,一般来说,多维和其他引用类型的元素数组排序使用意义不大。 Arrays类中的sort()的格式: public static void sort([] a); 案例1: JDK的java.util包中定义的Arrays类提供了排序方法 一维数组排序: Java代码 1.package cn.z_xiaofei168.sort; 2. 3.import java.util.Arrays; 4. 5.public class TestArraySort { 6. 7./** 8. * @author z_xiaofei168 9. */ 10.public static void main(String[] args) { 11.int[] arr = { -1, -3, 5, 7, 9, 2, 4, 6, 8, 10 }; 12. System.out.print("整数排序前:"); 13. displayIntArr(arr); 14. Arrays.sort(arr); 15. System.out.print("整数排序后:"); 16. displayIntArr(arr); 17. 常见经典排序算法(C语言) 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序 一.希尔(Shell)排序法(又称宿小增量排序,是1959年由D.L.Shell提出来的) /* Shell 排序法*/ #include } } 二.二分插入法 /* 二分插入法*/ void HalfInsertSort(int a[], int len) { int i, j,temp; int low, high, mid; for (i=1; i Java程序员必知的8大排序<合肥软件培训> [来源:本站| 日期:2012年12月24日| 浏览173次] 字体:[大中小] 8种排序之间的关系: 1,直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的。如此反复循环,直到全部排好顺序。 (2)实例 (3)用java实现 //从小到大 package com.njue; 2 3public class insertSort { 4public insertSort(){ 5 inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51}; 6int temp=0; 7for(int i=1;i 下面是377个Java的例子。如果你是牛人,看看你能做出多少? 如果有人不相信这些例子都是Java做的,可以看看清华大学的《Java范例开发大全》实例1开发第一个Java程序 实例2自动提升 实例3自动转换 实例4常用基础类型之强制转换 实例5算术运算符 实例6关系运算符 实例7逻辑运算符 实例8位运算符 实例9移位运算符 实例10转型运算符 实例11常量与变量 实例12各种进制的转换 实例13 Java中的进制与移位运算符 实例14判断输入的年份是否为闰年 实例15抽奖活动 实例16xx乘法表 实例17如何列出素数 实例18 Java中的递归 实例19男生女生各多少人 实例20求xx数 实例21求任意一个正数的阶乘 实例22求n的n次方 实例23利用for循环输出几何图形 实例24xx 实例25求1到100之间的和 实例26存上100元需要多少天 实例27输出100之间的所有偶数 实例28如何判断回文数字 实例29输出100之间的所有奇数 实例30求最大的随机数 实例31判断字母分类 实例32优良及差 实例33打印任意一年日历 实例34一年四季的划分 实例35除0发生的算术异常(ArithmeticException) 实例36数组下标越界异常(ArrayIndexOutOfBoundsException)实例37数组元素类型不匹配异常(ArrayStoreException) 实例38强制类型转换异常(ClassCastException) 实例39索引越界异常(IndexOutOfBoundsException) 实例40空指针异常(NullPointerException) 课题:选择排序的算法实现 授课教师:钱晓峰 单位:浙江金华第一中学 一、教学目标 1.知识目标: (1)进一步理解和掌握选择排序算法思想。 (2)初步掌握选择排序算法的程序实现。 2.能力目标:能使用选择排序算法设计程序解决简单的问题。 3.情感目标:培养学生的竞争意识。 二、教学重点、难点 1. 教学难点:选择排序算法的VB程序实现。 2. 教学重点:对于选择排序算法的理解、程序的实现。 三、教学方法与教学手段 本节课使用教学辅助网站开展游戏竞技和其他教学活动,引导学生通过探究和分析游戏中的玩法,得出“选择排序”的基本思路,进而使用VB来实现该算法。让学生在玩游戏的过程中学到知识,然后再以这些知识为基础,组织学生进行又一个新的游戏。“从生活中来、到生活中去、寓教于乐”便是这堂课的主导思想。 四、教学过程 五、教学设计说明 在各种游戏活动、娱乐活动中,人们都会不知不觉地使用各种基础算法的思想来解决问题。通过这类课堂活动,可以帮助学生更加容易地理解和接受这些算法。“从生活中来、到生活中去、寓教于乐”便是这堂课的主导思想。 本节课以教学辅助网站为依托,以游戏活动“牛人争霸赛”为主线,将教学内容融入到游戏活动中,让学生从中领悟知识、学到知识,然后又把学到的知识应用到新的游戏活动中。 本节课所使用的教学辅助站点记录了每一个学生的学习任务的完成情况,通过这个站点,我们可以实时地了解每一个学生学习任务的完成情况,也解决了《算法与程序设计》课程如何进行课堂评价的问题。 本节课的重点和难点是对选择排序算法思想的理解和选择排序算法的程序实现。如何解决这两个难点是一开始就需要考虑的问题,本节课通过玩游戏的方式,让学生不知不觉地进入一种排序思维状态,然后引导学生分析玩游戏的步骤,这样就可以很顺畅地让学生体验到选择排序的算法思想。然后,进一步分析这种方法第I步的操作,让学生根据理解完成第二关的“流程图游戏”,这又很自然地引导学生朝算法实现的方向前进了一步,接着让学生分析游戏中完成的流程图,得出选择排序的程序。为了巩固学生的学习效果,最后以游戏的方式让学生巩固知识、强化理解。 六、个人简介 钱晓峰,男,中共党员,出生于1981年12月,浙江湖州人。2004年6月毕业于浙江师范大学计算机科学与技术专业,同年应聘到浙江金华第一中学任教信息技术课。在开展日常教学工作的同时,开设的校本课程《网站设计与网页制作》、《常用信息加密与解密》,深受学生好评;与此同时,还根据学校实际情况开发了《金华一中网络选课系统》、《金华信息学奥赛专题网》等网络应用程序;教学教研方面,也多次在省、市、学校的各项比赛中获奖。 VB 程序设计之十大算法-------“选择排序”教学设计 姓名:XXX 邮箱:XXX 本节课取自《Visual Basic 语言程序设计基础》,因本书中涉及到排序类的题型不多,而且知识点比较单一,例题没有很好的与控件结合起来,因此在课堂中将引入形式各样的题型,让学生通过读题、分步解题来掌握知识点,得出一类题型的解题规律,提高课堂教学的有效性。 【学情分析】 本课教学对象是中职二年级计算机应用技术专业班级,班级由33名同学组成。他们大部分突显出拿到编程题无从下手的窘况,缺乏分析问题的能力,由于英语底子薄,在编写代码方面有时即使知道该如何书写,但也总因为单词写错而影响整题得分。 【考纲分析】 对于这一算法,在考纲中只有这样一句话:“掌握选择排序法的编程方法”。但是对于这个知识点是高职高考中操作设计大分题,因此必须让学生引起高度的重视。例如在2016年的高职高考中,最后一题设计题16分就是关于排序题。【教学目标】 知识与技能 1.通过简单排序题,得出读题的方法和解题“三步走”模块化的概念。 2.能够将长代码进行分块化编写,从而解决复杂题型。 过程与方法 1.读题时学会抓住其中的关键字,知道解题思路 2.边讲边练的教学法,帮助学生自主学习 情感与态度 1.以简单易懂题入手,激发学生学习的热情,树立信心 2.培养学生处理复杂问题的耐心 【教学重点】 1.清楚选择排序的固定代码 2.对编程类题型形成“输入、处理、输出”三步走的概念 3.养成高职高考解题的规范性。 【教学难点】 1.能够学会捕捉题中的关键字 2.能够书写选择排序与控件相结合的代码 【教学方法】 分析法、举例法 实践冒泡排序 1、实践目标 (1)理解冒泡排序算法。 (2)初步掌握冒泡排序算法的程序实现。 2、任务描述 (1)用随机数函数生成一批数据,存放在数组d(1 to 8)中,生成的数据显示在待排序列表框中。 (2)用冒泡排序算法,对d中的数据进行排序,结果显示在已排序列表框中。 3、操作提示 (1)算法分析对数组d进行冒泡排序的算法流程图所示 (2)界面设计。(已经设计好) (3)数据生成。初始化随机数发生器,清空待排序列表框。取一个随机数,添加至街排序列表框,保存到数组d中,直到数组中存满数据。需要合使用的语句、函数功能说明如下:主要代码实现如下: Private Sub Command2_Click() '产生8个随机数,范围为0<=X<=1000 Randomize '随机数初始化 List1.Clear '原始数据清空 List2.Clear '将排序后的列表数据清空 For i = 1 To _____ d(i) = __________ 'Rnd 函数返回的随机数介于0 和1 之间,可等于0,但不等于1 List1.AddItem Str(d(i)) '将数据显示到原始数据列表中 Next End Sub (4)冒泡排序算法。根据冒泡算法流程图填写完善下面的程序代码。 Private Sub Command1_Click() '对8个数进行冒泡法排序 List2.Clear '将排序后的列表数据清空 For i = 1 To_____ '选择第i个最小的数 Min = i For_________ '如果找到更小的,用min记住它的编号If d(Min) > d(j) Then ________ Next j If Min <> i Then '如果最小的数所在的位置不是i,则交换 k = d(i) d(i) = d(Min) __________ End If Next i For i = 1 To 8 List2.AddItem Str(d(i)) '在列表2中显示排序后的数据Next i End Sub (5)调试运行程序。 (6) (观赏FLASH流程图)并完成课本35页的体验 C语言中三种常见排序算法分析 一、冒泡法(起泡法) 算法要求:用起泡法对10个整数按升序排序。 算法分析:如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次相邻元素的两两比较,在第j趟比较中要进行n-j次两两比较。比较的顺序从前往后,经过一趟比较后,将最值沉底(换到最后一个元素位置),最大值沉底为升序,最小值沉底为降序。 算法源代码: # include 选择排序法教案 教学目标: 掌握选择排序的算法,并会用选择排序法解决实际问题 教学重点: 选择排序算法的实现过程 教学难点: 选择排序算法的实际应用 教学过程: 一、引入 我们在实际生活中经常会产生一系列的数字,比如考试的成绩,运动会跑步的成绩,并对这些数据按一定的顺序排列得到我们所需要的数据,那么怎么样来实现这些排序呢?引入今天的课题。 二、新课 1.给出10个数,怎么实现排序呢? 78,86,92,58,78,91,72,68,35,74 学生回答:依次找出其中的最大数,找9次后能完成排序。 ●排第一个数时,用它和其后的所有数逐个进行比较,如果比其它数要大,则 进行交换,否则保持不变。经过一轮比较后,我们得到最大数,并置于第一位置。 相应的程序代码为: For i=2 to 10 if a(1)java 排序面试题
常见经典排序算法(C语言)1希尔排序 二分插入法 直接插入法 带哨兵的直接排序法 冒泡排序 选择排序 快速排
排序算法原理与实现(java)
《Java范例开发大全》
选择排序的算法实现
选择法排序的教学设计
实践 选择法排序 练习题
C语言冒泡、插入法、选择排序算法
选择排序法教案