短暂JavaEE基础班就要结束了,说实在也没什么技术贴能写,毕竟现在学的还不多。这里我清理了一些知识点:一些基础语句:选择结构,循环结构之类的;面对方法中的封装;数组中的一维数组,二维数组,Arraylist;简单的IO流。差不多这样吧,之前是想写一个for循环流程的知识点,不过看了论坛上的技术贴就觉得有些简单了。不过在写快速排序之前来看看这个题,热一下身倒也可以。
下面先上题:
public class Test_01 {
public static void main(String[] args) {
int i = 0;
for (method('B'); method('C') && i < 2; method('D')) {
method('A');
i++;
}
}
public static boolean method(char c) {
System.out.println(c);
return true;
}
}
问输出什么? 这个题目呢,肯定是很基础的,除了咋一看上去有些唬人之外,内容也就是之前我们上课的时候讲过的for循环的流程。不过就是这个题,也是就业时的面试题。当然做这样的基础题只要静下心来,按部就班的走一遍流程就完成了,所以这里写一下答案过程就不提了,不会的话可以看一下for循环的流程。
答案:BCADCADC。
好了现在呢,就讲数组排序的问题了。我们这个JavaEE基础班学到的内容也足够做数组排序的问题了,特别是经典的冒泡排序和选择排序。只要告诉你它的运行方式,你大概就能写出来了。但是这两个排序方式太简单了,而且效率很低。本来我也不清楚这个效率低不低的,然后我学到了获取当前时间的方法,于是测试了三者对数组处理的速度。
我在写完快速排序之后,测试了这三种排序方式:对100000个不重复元素的数组进行排序
冒泡排序用时 15000ms左右
选择排序用时 4400ms左右
快速排序用时 10ms左右
可以看出快速排序比前两种好的太多了,特别是在处理大容量的数组的时候。然后我通过观察这三者的代码,发现冒泡排序和选择排序重复次数很高,大概需要遍历数组n/2次,n是数组长度,因为每遍历一次只能减少下次遍历一个数组元素的运算量。
冒泡排序的循环内容:
for(inti=0;i<arr.length-1;i++){//外层循环控制排序趟数
for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
可以看出遍历全部数组成员很大程度的浪费了计算力,那么就需要减少遍历的次数以及每次遍历的元素个数。嗯,好的,看不懂~这个可以在之后的学习中慢慢的去了解,不过呢可以看出来,好的算法可以让程序变的更加简洁、高效!所以在学习的过程中,我们应该尝试各种方式的去实现目标,不断的优化自己的代码,在学习的过程中养成这样的习惯,然后也需要我们了解更多的知识内容,才能想出更好的方案来。
好了好了,也写不出什么花样来,希望对比较基础的同学有那么一点点启发吧。
|
|