#include<stdlib.h>
void BubbleSort(int a[], const int first, const int last)//冒泡排序
void InsertSort(int a[], const int first, const int last)//插入排序
void SelectSort(int a[], const int first, const int last)//选择排序
void MergeSort(int a[], const int p, const int r)//合并排序
void QuickSort(int a[],const int p,const int r)//快速排序
void ShellSort(int a[],const int p,const int r,const int dlta[],const int t)//希尔排序
void HeapSort(int a[],const int p, int r)//堆排序
void StoogeSort(int a[],const int p,const int r)//Stooge排序(不用)算法复杂度没算清楚
void main()
{
//插入排序算法
int a[11] = {6,4,5,3,2,1}
int dlta[]={9,5,3,2,1}
//BubbleSort(a,0,5)
//InsertSort(a,0,5)
//SelectSort(a,0,5)
//MergeSort(a,0,5)
//QuickSort(a,0,5)
//ShellSort(a,0,5,dlta,5)
HeapSort(a,0,5)
//StoogeSort(a,0,5)
for(int i=0i<=5i++)
{
printf("%d ",a[i])
}
}
/************************冒泡排序***********************/
void BubbleSort(int a[], int first, int last)
{
//实现对数组a[]中a[first]到a[last]升序的“冒泡”排序
int i,j,temp
for(i=firsti<=lasti++)
{
for(j=firstj<last-ij++)
{
if(a[j] >a[j+1])
{
temp = a[j]
a[j] = a[j+1]
a[j+1] = temp
}
}
}
}
/************************插入排序***********************/
void InsertSort(int a[], int first, int last)
{
//实现对数组a[]中a[first]到a[last]升序的“插入”排序
//最坏情况为n的平方,,多用于小数组
int i,j,temp
for(i=first+1i<=lasti++)
{
temp = a[i]
j = i - 1
while((j >= 0) &&(a[j] >temp))
{
a[j+1] = a[j]
j--
}
a[j+1] = temp
}
}
/************************选择排序***********************/
void SelectSort(int a[], int first, int last)
{
//实现对数组a[]中a[first]到a[last]升序的“选择”排序
int i, j, temp, num
for(i=firsti<lasti++)
{
num = i
for(j=i+1j<=lastj++)
{
if(a[j] <a[num])
{
num = j
}
}
if(i != num)
{
temp = a[num]
a[num] = a[i]
a[i] = temp
}
}
}
/************************合并排序***********************/
void Merge(int a[],const int p,const int q,const int r)
{
//合并排序算法中的实现合并的子程序
int iLLength,iRLength
int *L, *R, i, j, k
iLLength = q - p + 1
iRLength = r - q
L = (int *)malloc(iLLength*sizeof(int))//或者 C++中 new int[iLLength]
R = (int *)malloc(iRLength*sizeof(int))//或者 C++中 new int[iRLength]
if(L == 0 || R== 0)
{
printf("内存分配失败!!!")
return
}
for(i=0i<iLLengthi++)
{
L[i] = a[p+i]
}
for(j=0j<iRLengthj++)
{
R[j] = a[q+j+1]
}
i = 0
j = 0
for(k=pk<=rk++)
{
if((i<iLLength) &&(j<iRLength) &&(L[i]<=R[j]) || (j == iRLength))
{
a[k] = L[i]
i++
}
else if(j<iRLength)
{
a[k] = R[j]
j++
}
}
free(R)free(L)
}
void MergeSort(int a[],const int p,const int r)
{
//合并排序算法-主程序
//n*lg(n),系数较小
int q
if(p<r)
{
q = (p+r)/2
MergeSort(a,p,q)
MergeSort(a,q+1,r)
Merge(a,p,q,r)
}
}
/************************Stooge排序***********************/
void StoogeSort(int a[],const int p,const int r)
{
//Stooge算法
int temp, k
if(a[p]>a[r])
{
temp= a[p]
a[p]= a[r]
a[r]= temp
}
if((p+1) >= r)
{
return
}
k = (r-p+1)/3
StoogeSort(a,p,r-k)
StoogeSort(a,p+k,r)
StoogeSort(a,p,r-k)
}
/************************快速排序*********************/
int QuickPartition(int a[],const int p,const int r)
{
//快速排序的(关键)分治过程
int temp, x, i, j
x = a[r]
i = p - 1
for(j=pj<rj++)
{
if(a[j] <= x)
{
i = i + 1
temp = a[i]
a[i] = a[j]
a[j] = temp
}
}
temp = a[i+1]
a[i+1] = a[r]
a[r] = temp
return (i+1)
}
/*
void QuickSort(int a[],const int p,const int r)
{
//快速排序算法-主程序
//与下面的“尾递归实现方法”比较,缺点:右边数组的递归不是必须的,增加了运行堆栈深度和调用开销
int q
if(p <r)
{
q = QuickPartition(a, p, r)
QuickSort(a, p, q-1)
QuickSort(a, q+1, r)
}
}
*/
void QuickSort(int a[],int p,const int r)
{
//快速排序算法-主程序
//“尾递归实现方法”是对上面的快速排序主程序实现的一种优化
//系数较小,常用大数组
int q
while(p <r)
{
q = QuickPartition(a, p, r)
QuickSort(a, p, q-1)
p = q + 1
}
}
/************************希尔排序**********************/
void ShellInsert(int a[],const int p,const int r, int dk)
{
//希尔排序算法的关键子程序-插入排序子程序
int i, j, temp
for(i=p+dki<=ri++)
{
if(a[i] <a[i-dk])
{
temp = a[i]
for(j=i-dk((j>=0) &&(temp <a[j]))j -= dk)
{
a[j+dk] = a[j]
}
a[j+dk] = temp
}
}
}
void ShellSort(int a[],const int p,const int r,const int dlta[],const int t)
{
//希尔排序算法-主程序
//按增量序列dlta[]中的前t个增量,实现对数组a[]中a[p]到a[r]的排序
//dlta[]可能取值如:1,2,3,5,9dala[k]=2^(t-k+1)-1 其中0<=k<=t<=ld(b-1)
//增量序列的最后一个值必须是1
//增量序列中的值没有除1以外的因子, 其精确时间复杂度:数学上尚未解决的难题
int k
for(k=0k<tk++)
{
ShellInsert(a,p,r,dlta[k])
}
}
/************************堆排序***********************/
//堆排序,不如快速排序
//但是可用其来实现“优先级队列”
int Parent(int i)
{
return ((i+1)/2-1)
}
int Right(int i)
{
return (2*(i+1)-1)
}
int Left(int i)
{
return (2*(i+1))
}
void Max_Heapify(int a[],const int hplast,const int i)
{
int l, r,largest,temp
l = Left(i)
r = Right(i)
largest = ((l<=hplast) &&(a[l]>a[i])) ? l:i
if((r<=hplast) &&(a[r]>a[largest]))
{
largest = r
}
if(largest != i)
{
temp = a[i]
a[i] = a[largest]
a[largest] = temp
Max_Heapify(a,hplast,largest)
}
}
void Build_Max_Heap(int a[],const int p, const int r)
{
int i
for(i = (p+r)/2i>=pi--)
{
Max_Heapify(a,r,i)
}
}
void HeapSort(int a[],const int p, int r)
{
int i,temp
Build_Max_Heap(a,p,r)
for(i = ri >pi--)
{
temp = a[p]
a[p] = a[i]
a[i] = temp
r -= 1
Max_Heapify(a,r,0)
}
}
首先,你得先成为Java程序员,再到Java工程师,才能到Java高级工程师
不知道你对Java编程知识了解到什么程度,凡事都需要积累,沉淀。
如果是完全没有基础,那就从最基础的开始,参加专业正规的Java培训机构学习基础知道,四个半月毕业后,就业相关Java编程工作。
努力认真工作的过程可以学习很多的知识,给自己制定一个两年计划 ,两年内要实现多少有用的代码,做出多少个有用项目。
而后,根据具体情况,继续制定后两年的计划。
如果按上述程序走五年,Java高级工程师就离你不远了!
高级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.软件工程,项目管理