java什么是冒泡查询?java里,几种排序方法各有什么优缺点
大家好,今天小编来为大家解答以下的问题,关于java什么是冒泡查询,java里,几种排序方法各有什么优缺点这个很多人还不知道,现在让我们一起来看看吧!
java作业
下面一道一道的完成:
第一题:
1)快速排序
package src;
/*
*有几个关键点
* 1中间值到底取什么
* 2 i和j的比较什么时候需要是<=
* 3递归调用的left和right值如何确定
*/
public class QuickSort{//快速排序
public static void main(String[] args){
int[] a={100,40, 60, 87, 34, 11, 56, 0};
int left= 0;
int right= a.length- 1;
quickSort(a, left, right);
//循环显示数组
for(int i= 0; i< a.length; i++){
System.out.print(a[i]+"");
}
}
public static void quickSort(int[] a, int left, int right){
int middle, temp;
int i= left;
int j= right;
middle= a[left];
while(i< j){
while((a[i]< middle)&&(i< right)){
i++;
}
while((a[j]> middle)&&(j> left)){
j--;
}
if(i<= j){
temp= a[i];
a[i]= a[j];
a[j]= temp;
i++;
j--;
}
}
if(left< j){
quickSort(a, left, j);
}
if(right> i){
quickSort(a, i, right);
}
}
}
2)冒泡排序
package src;
public class PopSort{
public static void main(String[] args){
int[] a={100,40, 60, 87, 34, 11, 56, 0};
for(int i= 0; i< a.length; i++)
for(int j= 0; j< a.length- i-1; j++){
if(a[j]> a[j+1]){
int temp= a[j];
a[j]= a[j+1];
a[j+1]= temp;
}
}
for(int k= 0; k< a.length; k++){
System.out.print(a[k]+"");
}
}
}
第二题
package src;
public class BinarySearch{
/**
*@param args
*@throws IOException
*/
public static void main(String[] args){
int[] datas={ 1, 2, 3, 4, 5, 6,7, 8, 9, 10};//二分法必须应用在有序数组
int key= 9;
System.out.println("the result is"+ bSearch(datas, key));
}
public static int bSearch(int[] datas, int key){
int index=-1;
int low= 0;
int high= datas.length- 1;
while(low<= high){
int middle=(low+ high)>> 1;
if(key== datas[middle]){
index= middle;
break;
} else if(key> datas[middle]){
low= middle+ 1;
} else if(key< datas[middle]){
high= middle- 1;
}
}
return index;
}
}
第三题
package src;
public class CharCode{
public static void main(String[] args){
String str="hello world";
char[] strToChar= str.toCharArray();
int charSum= 0;
for(int i= 0; i< strToChar.length; i++){
charSum= charSum+ strToChar[i];
}
System.out.print("the charArray's Sum is"+ charSum);
}
}
第四题
package src;
public class NewArray{
/**
*@param args
*/
public static void main(String[] args){
int a[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
int[] b= new int[a.length];
int j= 0;
for(int i= 0; i< a.length; i++){
if(a[i]!= 0){
b[j]= a[i];
j++;
}
}
for(int k= 0; k< j; k++){
System.out.print(b[k]+"");
}
}
}
第五题:
ArrayList实现
package src;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class StudentList{
/**
*@param args
*/
public String name;
public int age;
public String grade;
public String school;
public static List stuList= null;
public StudentList(String name, int age, String grade, String school){
super();
this.name= name;
this.age= age;
this.grade= grade;
this.school= school;
}
public static void main(String[] args){
stuList= new ArrayList();
stuList.add(new StudentList("aaa",13,"6","tianjin"));
stuList.add(new StudentList("kkk",13,"6","tianjin"));
stuList.add(new StudentList("ddd",13,"6","shenzhen"));
stuList.add(new StudentList("ccc",13,"6","beijing"));
stuList.add(new StudentList("eee",15,"6","tianjin"));
stuList.add(new StudentList("aaa",13,"6","tianjin"));
stuList.add(new StudentList("kkk",13,"6","tianjin"));
stuList.add(new StudentList("ddd",13,"6","shenzhen"));
stuList.add(new StudentList("ccc",13,"6","beijing"));
stuList.add(new StudentList("eee",15,"6","tianjin"));
for(Iterator it= stuList.listIterator(); it.hasNext();){
StudentList stu=(StudentList)it.next();
System.out.println(stu.name+","+stu.age+","+ stu.grade+","+ stu.school);
}
}
}
数组实现:
package src;
public class StudentArray{
/**
*@param args
*/
public String name;
public int age;
public String grade;
public String school;
public StudentArray(String name, int age, String grade, String school){
super();
this.name= name;
this.age= age;
this.grade= grade;
this.school= school;
}
public static void main(String[] args){
StudentArray[] stua={new StudentArray("aaa",13,"4","beijing"), new StudentArray("bbb",14,"4","dalian"),new StudentArray("ddd",13,"4","beijing"),new StudentArray("ccc",13,"4","tianjin"),new StudentArray("eee",20,"8","beijing"),new StudentArray("fff",23,"10","beijing"),new StudentArray("aaa",13,"4","beijing"),new StudentArray("aaa",13,"4","beijing"),new StudentArray("kkk",13,"4","beijing"),new StudentArray("www",13,"4","beijing"),new StudentArray("aaa",13,"4","beijing")};
for(int i= 0; i< stua.length; i++){
System.out.println(stua[i].name+","+ stua[i].age+","+stua[i].grade+","+stua[i].school);
}
}
}
第六题:
package job;
public abstract class Job{//这个是父类抽象类,表示职业类
public double baseWage;//基本工资
public Job(double baseWage){
super();
this.baseWage= baseWage;
}
public double getBaseWage(){
return baseWage;
}
public void setBaseWage(double baseWage){
this.baseWage= baseWage;
}
public double getYearWage(){//一年的工资
return baseWage* 12;
}
}
package job;
public class Farmer extends Job{
public Farmer(double baseWage){
super(baseWage);
// TODO自动生成构造函数存根
}
public double getYearWage(){
// TODO自动生成方法存根
return super.getYearWage();
}
}
package job;
public class Scientist extends Job{
public String yearendBonus;//年终奖
public Scientist(double baseWage){
super(baseWage);
//
}
public String getYearendBonus(){
return yearendBonus;
}
public void setYearendBonus(String yearendBonus){
this.yearendBonus= yearendBonus;
}
public double getYearWage(){
//
return super.getYearWage();
}
}
package job;
public class Teacher extends Job{
public double reward;//每天的课酬
public Teacher(double baseWage){
super(baseWage);
// TODO自动生成构造函数存根
}
public double getReward(){
return reward;
}
public void setReward(double reward){
this.reward= reward;
}
public double getYearWage(){
// TODO自动生成方法存根
return super.getYearWage();
}
}
package job;
public class Waiter extends Job{
public Waiter(double baseWage){
super(baseWage);
// TODO自动生成构造函数存根
}
public double getYearWage(){
// TODO自动生成方法存根
return super.getYearWage();
}
}
package job;
public class Worker extends Job{
public Worker(double baseWage){
super(baseWage);
// TODO自动生成构造函数存根
}
public double getYearWage(){
// TODO自动生成方法存根
return super.getYearWage();
}
}
package job;
public class Manager{//这是一个管理各种职业工资的类,这是一个含有具体业务的类
/**
*@param args
*/
public static void main(String[] args){
Teacher tjob= new Teacher(5000);//教师的工资是5000美金一个月
printSalary(tjob);
Scientist sjob= new Scientist(8000);
printSalary(sjob);
Farmer fjob= new Farmer(4000);
printSalary(fjob);
Waiter wjob= new Waiter(3500);
printSalary(wjob);
Worker workjob= new Worker(4500);
printSalary(workjob);
}
public static void printSalary(Job job){
System.out.println(job.getYearWage());
}
}
第七题:
package src;
public class Writer{
/**
*@param args
*/
public static void main(String[] args){
int i= 911;
float j= 911.911f;
String str="hello world";
write(i);
write(j);
write(str);
}
public static void write(int s){
System.out.print("int:"+ s+"\n");
}
public static void write(float s){
System.out.print("float:"+ s+"\n");
}
public static void write(String s){
System.out.print("String:"+ s+"\n");
}
}
好困啊,睡觉了
java里,几种排序方法各有什么优缺点
一、冒泡排序
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较 a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对 a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。
优点:稳定;
缺点:慢,每次只能移动相邻两个数据。
二、选择排序
冒泡排序的改进版。
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
选择排序是不稳定的排序方法。
n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
①初始状态:无序区为R[1..n],有序区为空。
②第1趟排序
在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
……
③第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(1≤i≤n- 1)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
优点:移动数据的次数已知(n-1次);
缺点:比较次数多。
三、插入排序
已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、 b[2]、……b[m],需将二者合并成一个升序数列。首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来 a[x]的位置这就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若无数组a,可将b[1]当作n=1的数组a)
优点:稳定,快;
缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。
三、缩小增量排序
由希尔在1959年提出,又称希尔排序(shell排序)。
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。发现当n不大时,插入排序的效果很好。首先取一增量d(d<n),将a[1]、a[1+d]、a[1+2d]……列为第一组,a[2]、a[2+d]、 a[2+2d]……列为第二组……,a[d]、a[2d]、a[3d]……列为最后一组以次类推,在各组内用插入排序,然后取d'<d,重复上述操作,直到d=1。
优点:快,数据移动少;
缺点:不稳定,d的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取。
四、快速排序
快速排序是目前已知的最快的排序方法。
已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先任取数据 a[x]作为基准。比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据<a[x],a[k+1]~a[n]中的每一个数据>a[x],然后采用分治的策略分别对a[1]~a[k-1]和a[k+1]~a[n]两组数据进行快速排序。
优点:极快,数据移动少;
缺点:不稳定。
五、箱排序
已知一组无序正整数数据a[1]、a[2]、……a[n],需将其按升序排列。首先定义一个数组x[m],且m>=a[1]、a[2]、……a[n],接着循环n次,每次x[a]++.
优点:快,效率达到O(1)
缺点:数据范围必须为正整数并且比较小
六、归并排序
归并排序是多次将两个或两个以上的有序表合并成一个新的有序表。最简单的归并是直接将两个有序的子表合并成一个有序的表。
归并排序是稳定的排序.即相等的元素的顺序不会改变.如输入记录 1(1) 3(2) 2(3) 2(4) 5(5)(括号中是记录的关键字)时输出的 1(1) 2(3) 2(4) 3(2) 5(5)中的2和 2是按输入的顺序.这对要排序数据包含多个信息而要按其中的某一个信息排序,要求其它信息尽量按输入的顺序排列时很重要.这也是它比快速排序优势的地方.
一个高级java工程师需要具备什么能力和技术
宏观方面
一、 JAVA。
要想成为JAVA(高级)工程师肯定要学习JAVA。一般的程序员或许只需知道一些JAVA的语法结构就可以应付了。但要成为JAVA(高级)
工程师,您要对JAVA做比较深入的研究。您应该多研究一下JDBC、IO包、Util包、Text包、JMS、EJB、RMI、线程。如果可能,希望您
对JAVA的所有包都浏览一下,知道大概的API,这样您就发现其实您想实现的很多功能,通过JAVA的API都可以实现了,就不必自己费太多的脑经了。
二、设计模式。
其实写代码是很容易的事情,我相信您也有同感。但如何写得好就比较难了。这个“好”字包括代码可重用性,可维护性,可扩展性等。如何写出好的代
码往往要借助一些设计模式。当然长期的代码经验积累,只要您用心,会使您形成自己代码风格。相信您的代码也比较符合代码的可重用性,可维护性,可扩展性。
但既然前人已经给我们总结出了经验,我们何不踩着前人的肩膀前进?
三、 XML。
现在的系统中不使用XML几乎是不可能的。XML的功能非常强大,它可以做数据转换、做系统的配置、甚至可保存您的系统业务数据。因此您必须了解
XML,包括它的语法,结构。您还需要比较熟练的使用解析XML的一些API,比如JDOM,SAX等,因为在我们一般的项目中,XML往往担当系统配置
信息的作用,您需要用这些API解析这些配置信息,开发完美的项目。
四、精通使用一种或两种框架。
“框架都会有许多可重用的代码,良好的层次关系和业务控制逻辑,基于框架的开
发使你可以省出很多的开发成本”。这里希望您能精通,更多的是希望您能通过框架的使用了解框架的思想。这样您在开发一个项目时思路会开阔一些,比如您
会想到把SQL语句与您的JAVA代码分开,再比如您会考虑把您的业务逻辑配置到XML或者数据库中,这样整个项目就很容易扩张了。
五、熟悉主流数据库。其实真正比较大的项目都是有人专门做数据库的,但往往很多项目要求作为(高级)工程师的您也参与数据库的设计以及SQL的编写。所以为了
更好的为国家做贡献,建议您还是多了解一些主流数据库,比如SQLSERVER,ORACLE,多连接SQL和存储过程以及触发器。如果您不是“科班”出
身,您还需要补充一些数据库原理方面的知识。
六、精通一种或两种WEBServer。
因为作为JAVA工程师,特别时
想成为高级JAVA工程师的您,您不可避免地要部署您的项目到WebServer上,而且只有当您精通一种WebServer,您才可能最大限度地使用它
的资源,这往往可以节省很多时间和精力。
七、 UML。
您肯定想成为高级工程师,因此您有必要了解或熟练或精通UML,这取决于您有多大决心想成为高级工程师和项目经理。在比较正规的开发团队
中,UML是讨论项目的交流工具,您要想做一个软件工程师,您至少要能看懂,您要想做高级工程师,您要能通过它来描述您对项目的理解,尽管这不是必须,但
却很重要。
八、站在高度分析问题:
这不是一个知识点,也不是通过书本就能学得到的。只所以提到这一点,是因为我比您还着急,我希望您更快的成为一个高级的软件工程师,而
不是一个一般的软件工程师。希望您在工作中多向您的系统分析员、需求分析员、系统设计员学习,多站在他们角度上去看您在开发的项目。在最好在项目之初先在
您的脑海里对项目有个大致的分析、设计,然后和他们进行比较,找找差别,想想缺点。
九、工具。
您在这个阶段可能接触到不同的工具了,尽管您还需要使用JB或者IDEA,但能可能对
ROSE,Together要多了解一些,因为您要画UML了。不要再对Dreamweaver等HTML编辑器情有独钟了,那些JSP页面让初级程序员去写吧
微观方面
1.Core Java部分
这是最基础的,对于一个java高级开发/设计人员,你需要对这一部分达到精通的水平,重点内容如下:
a.面向对象编程思想(封装继承多态接口)
b.字符串处理
c.java.lang包,java.util包等常用包
d.java异常处理
2.Java高级部分
a.Java I/O流
b.Java多线程技术
c.Java网络编程
d.Java Swing
后两项可以了解即可,如果项目需要可以深入研究
3.前端基本技能
* HTML+ CSS网页开发
* JavaScript
* Jquery
*浏览器兼容性 CSS hack(了解)
4.熟练使用JSP+ Servlet进行开发
5.MVC设计模式,原理,以及相关框架,如Struts
6.SSH框架
7.缓存技术 session& cookie
8.熟练使用一种以上Java开发工具(Eclipse/MyEclipse/Jbuilder/Jcreator/IntelliJIEDA/NetBeans)
9.熟练使用XML
JDOM w3c.dom SAX
10.Java设计模式
工厂模式,单例模式==
11.Java反射机制
反射的各种用法
12.了解或熟悉 C, C++,.NET
13.熟悉JDK的配置,环境变量
14.数据库oracle必学,其他最好了解一种以上(mysql,sql server,access==)
oracle:视图,索引,存储过程,触发器,游标,包,常用函数==
15.数据库原理
事务的原理,锁机制,表连接,复杂查询语句(工作经验),性能调优,锁表以及解决方案==
16.JDBC,连接池
17.Ajax,反向Ajax
18.HTTP协议,request和 response的原理,HTTP status(了解常用的),Https原理
19.熟悉Linux基本命令,使用过Linux/Unix系统,可以编写shell脚本,可以在Linux上部署项目
20.了解windows系统批处理脚本bat
21.了解HTML5,最好学习过
22.熟悉一种JS框架,如Prototype
23.J2EE原理熟悉一种以上web容器如Tomcat,JBoss,websphere,weblogic==
24.熟悉ant或maven
25.熟悉一门脚本语言,如python,ruby
26.了解php/ asp
27.了解ftp协议及原理
28.熟练使用Junit测试,熟悉Mockito等测试工具
29,熟悉javac,javadoc,native,native2ascii等常用命令
30.熟悉常用的排序算法,如冒泡排序,快速排序等,最好自己研究过一些的算法。
31.了解Flex(不学也没关系)
32.了解敏捷开发模式
33.工作流workflow至少用过一种,如OSworkflow,了解原理
34.使用过VPN了解其原理
35.熟悉jstl表达式和el表达式
36.熟悉webservice,WSDL,SOAP
37.图片处理,如图片上传,预览,限制大小等
38.版本控制工具,CVS VSS SVN
39,JSON技术,JSON+AJAX
40.分页技术,最好自己实现过不仅仅是用过要知道原理
41.Java Mail
42.Java读写txt,excel,JXL技术
43.JVM原理,JVM内存管理,GC,Java堆栈池
44.熟练使用下面的工具:
office办公软件,word,excel,ppt等
plsql,sqldevelop数据库开发工具
outlook大公司都用
ue编辑器
浏览器控制台,调试
SHH/PUTTY远程
45.UML建模工具Rational Rose等
46.使用log4j
47.使用过开放Api如百度,腾讯街景,新浪微博等
48.页面静态化技术(伪静态页面)
49.报表技术,使用过报表制作工具,如水晶易表。
50.定时任务,如Spring batch,学会自定义batch任务(不适用第三方工具)
51.了解uuid
52.b/s和 c/s架构
53.正则表达式
54.了解jndi jms
55.ERP
56.UNICODE编码,乱码解决
57.开源网络编辑器,如ckEditor
58.二进制原理
59.使用过,了解过开源论坛框架,如discuzz
60.GWT,Closure框架
61.了解大数据,云计算
62.搜索引擎搜索技术
63.软件工程,项目管理
文章分享结束,java什么是冒泡查询和java里,几种排序方法各有什么优缺点的答案你都知道了吗?欢迎再次光临本站哦!