首页编程java编程java什么是冒泡查询?java里,几种排序方法各有什么优缺点

java什么是冒泡查询?java里,几种排序方法各有什么优缺点

编程之家2023-10-1186次浏览

大家好,今天小编来为大家解答以下的问题,关于java什么是冒泡查询,java里,几种排序方法各有什么优缺点这个很多人还不知道,现在让我们一起来看看吧!

java什么是冒泡查询?java里,几种排序方法各有什么优缺点

java作业

下面一道一道的完成:

第一题:

1)快速排序

java什么是冒泡查询?java里,几种排序方法各有什么优缺点

package src;

/*

*有几个关键点

java什么是冒泡查询?java里,几种排序方法各有什么优缺点

* 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里,几种排序方法各有什么优缺点的答案你都知道了吗?欢迎再次光临本站哦!

c 与java控制语句的区别是什么,Java和C有什么区别java开发用什么电脑什么好 学习java开发电脑什么配置好