在数组里学到了三个算法,果断布置任务,拿下它们!!!
首先照着之前的笔记敲了一遍,发现之前的笔记有错,所以在网上搜了一下,修正了一下代码。调试OK之后,
自己敲了一遍,出了很多错,但是一个一个慢慢的都调试出来了。
上边都是自己的练习过程,我们小组是这样安排的。白天自己练习,把在数组中学到的三个算法的原理和代码都
理清楚,晚上拿着电脑,代码置空,重敲!
三个算法:选择排序、冒泡排序和二分查找,你猜我花了多长时间,从敲到调试完成,20分钟,为自己鼓掌啦!
嘻嘻,大家肯定比我做的更好啦~
下边分享一下我的代码吧~
选择排序:
public class suanfa{
public static void main(String[] args){
int[] ints={1,2,3,9,7,5,23};
xuanze(ints);//选择排序
//maopao(ints);//冒泡排序
//erfen(ints,3);//二分查找
}
//选择排序
public static void xuanze(int[] a){
for (int i=0;i<a.length;i++)
{
for(int j=i+1;j<a.length;j++){
if(a[i]<a[j])
{
int temp=a[i];
a[i]=a[j];
a[j]=temp;
}
for (int c=0;c<a.length;c++){
System.out.print(a[c]+" ");
}
System.out.print("\n");
}
}
}
}
运行结果如下:
选择排序的原理就是从第一个位置开始,依次往后比较,直到找到最大(最小)的,然后再从第二个位置开始……
冒泡排序:
public static void maopao(int[] a){
for(int i=0;i<a.length;i++){
for(int j=a.length-1;j>i;j--)
{
if(a[j]>a[j-1]){
int temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
for(int c=0;c<a.length;c++)
{
System.out.print(a[c]+" ");
}
System.out.print("\n");
}
}
}
结果如下:
冒泡排序的原理就是从后往前,邻个进行比较,直到最大(最小)上升至第一个。
二分查找:
public static int erfen(int[] a,int num){
if (a.length==0) return -1;
int start=0;
int end=a.length-1;
int m=(start+end)/2;
if (a[m] == num) System.out.print(m+" "+"\n");
while(start<=end){
if(a[m]==num) return -1;
if(num>a[m])
{
start=m+1;
}
if(num<a[m]){
end=m-1;
}
m=(start+end)/2;
System.out.print(m+" "+"\n");
}
return -1;
}
结果如下:
这是二分查找的显示结果,显示的是所需查找数字的位置。在敲二分查找的时候,最关键的是除以2的时候的那
start和end与m关系的判断,在发现所查的数大于平均数位置上的数,这时候到底是start变化还是end变化,如何变
化,这个就不进行解密了,大家好好研究研究,二分法也就不难了。