java算法学习.docx

上传人:b****3 文档编号:2977850 上传时间:2022-11-16 格式:DOCX 页数:42 大小:898.38KB
下载 相关 举报
java算法学习.docx_第1页
第1页 / 共42页
java算法学习.docx_第2页
第2页 / 共42页
java算法学习.docx_第3页
第3页 / 共42页
java算法学习.docx_第4页
第4页 / 共42页
java算法学习.docx_第5页
第5页 / 共42页
点击查看更多>>
下载资源
资源描述

java算法学习.docx

《java算法学习.docx》由会员分享,可在线阅读,更多相关《java算法学习.docx(42页珍藏版)》请在冰豆网上搜索。

java算法学习.docx

java算法学习

算法的五个特征

1)有穷性:

对于任意一组合法输入法,在执行有穷步骤后一定能结束.同时算法的每个步骤都能在有限的时间内完成.

2)确定性:

在每种情况下所应执行的步骤,,在算法中都有确切的规定.并且算法在任何情况下都只有一条执行路径.

3)可行性:

算法中的所有操作都必须足够基本,都可以通过已经实现的基本操作,进行有限次的运算完成.

4)有输入

5)有输出

算法的设计原则:

正确性;

可读性;

健壮性;

高效率与低存储;

最大公约数算法

计算两个非负整数p和q的最大公约数:

q是0,则最大公约数为p。

否则,将p除以

q得到余数r,p和q的最大公约数即为q和

r的最大公约数。

publicstaticintgcd(intp,intq){

if(q==0)

returnp;

intr=p%q;

returngcd(q,r);

}

二分查找法算法

递归二分查找法:

staticintbinarySearch(intArray[],intlow,inthigh,intkeyValue){

if(low<=high){

intmid=(low+high)/2;

if(keyValue==Array[mid])

returnmid;

elseif(keyValue

//移动low和high

returnbinarySearch(Array,low,mid-1,keyValue);

elseif(keyValue>Array[mid])

returnbinarySearch(Array,mid+1,high,keyValue);

}else{

return-1;

}

return-1;

}

排序

选择排序:

下面是手写的选择排序

packagecom.test.algorithm;

importjava.util.Random;

/**

*选择排序:

从数组中选取最小的,然后放入开头,然后再从剩下的选择最小的如此往复.

*思路:

把第一个单独出来,从剩下的数组中选取最大的,然后用最大的跟被独立出来的比较,谁大就把谁放在哪个位置,如此往复

*

*@authorly-xguoqiang

*

*/

publicclassSelectSort{

/**

*

*@return

*/

privatestaticintgetMax(Integer[]array){

if(array==null||array.length<=1){

return0;

}

intindex=0;

inttemp=array[0];

for(inti=1;i

if(temp

temp=array[i];

index=i;

}

}

returnindex;

}

publicstaticInteger[]selectSort(Integer[]array){

if(array==null||array.length<=1){

returnarray;

}

for(inti=0;i

Integer[]temp=newInteger[array.length-i-1];

System.arraycopy(array,i+1,temp,0,array.length-i-1);

intindex=getMax(temp);

if(array[i+index+1]>array[i]){

Integernum=array[i];

array[i]=array[i+index+1];

array[i+index+1]=num;

}

}

returnarray;

}

publicstaticvoidmain(String[]args){

Randomrandom=newRandom();

Integer[]array=newInteger[1000];

for(inti=0;i<1000;i++){

array[i]=random.nextInt(10000);

}

Integer[]selectSort=selectSort(array);

for(Integerinteger:

selectSort){

System.out.println(integer);

}

}

}

冒泡排序

packagecom.test.algorithm;

importjava.util.Random;

/**

*思维:

其实就是不停的比较,如果大就交换.可以看成是石头不停的往下层

*@authorly-xguoqiang

*

*/

publicclassBubbleSort{

publicstaticInteger[]bubbleSort(Integer[]array){

for(inti=0;i

for(intj=0;j

if(array[j]>array[j+1]){

inttemp=array[j];

array[j]=array[j+1];

array[j+1]=temp;

}

}

}

returnarray;

}

publicstaticvoidmain(String[]args){

Integer[]array=getArray();

for(Integerinteger:

bubbleSort(array)){

System.out.println(integer);

}

}

publicstaticInteger[]getArray(){

Randomrandom=newRandom();

Integer[]array=newInteger[1000];

for(inti=0;i<1000;i++){

array[i]=random.nextInt(10000);

}

returnarray;

}

}

插入排序

packagecom.test.algorithm;

importjava.util.Collections;

importjava.util.LinkedList;

importjava.util.List;

/**

*插入排序:

网上的写法等下看.我们先写一个需要额外创建一个数组的做法来写

*

*@authorly-xguoqiang

*

*/

publicclassInsertSort{

publicstaticInteger[]insertSort(Integer[]array){

Listresult=newLinkedList<>();

result.add(array[0]);

for(inti=1;i

intj=0;

while(true){

//如果大于就插入

if(j==result.size()||result.get(j)>array[i]){

result.add(j,array[i]);

break;

}

j++;

}

}

returnresult.toArray(array);

}

publicstaticvoidmain(String[]args){

Integer[]insertSort=insertSort(BubbleSort.getArray());

for(Integerinteger:

insertSort){

System.out.println(integer);

}

}

//这个方法是网上的排序的方法.

publicstaticInteger[]sort(Integer[]integers){

intj;

//从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的

for(inti=1;i

inttmp=integers[i];//记录要插入的数据

j=i;

while(j>0&&tmp

integers[j]=integers[j-1];//向后挪动

j--;

}

integers[j]=tmp;//存在比其小的数,插入

}

returnintegers;

}

}

英文(Stack)一端插入和删除的特殊线性表.遵从先进后出的原则.

对栈的插入与删除不需要修改栈底的指针.

允许插入以及删除的一端称为栈顶(top).另一端称为栈底(bottom);栈中没有元素的时候称为空栈,插入称为进栈(push),删除称为退栈(pop)

下面是自己写的实现,如果以后有能力了,可以用阻塞队列写一个并发的栈.下面红色部分是看了网上的代码才发现的bug.这个要注意

Java里面Vector下面有一个实现类.stock.其实就是栈.

packagecom.test.algorithm;

/**

*自己实现栈

*@authorly-xguoqiang

*

*/

publicclassMystack{

//用来保存数据

privateint[]array;

//栈的容量

privateintmaxsize;

//栈顶指针

privateinttop=-1;

publicMystack(intmaxsize){

if(maxsize<0){

thrownewIllegalArgumentException("栈初始容量不能小于0:

"+maxsize);

}

this.maxsize=maxsize;

array=newint[maxsize];

}

/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1