冒泡排序
冒泡排序无疑是最为出名的排序算法之一,总共有八大排序!
八大排序:冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、堆排序、基数排序。
冒泡的代码还是相当简单的,两层循环,外层冒泡轮数,里层依次比较,江湖中人人皆知。
我们看到嵌套循环,应该立刻就可以得出这个算法的时间复杂度为O(n2)。
/*
* 1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换它们的位置
* 2.每一次比较,都会产生出一个最大的,或者最小的数字
* 3.下一轮则可以少一次排序
* 4.依次排序,直到结束
**/
public static void main(String[] args) {
int[] array = {798,33,23,16,65,45,2,4,66,9999};
array = sort(array);
System.out.println(Arrays.toString(array));
}
private static int[] sort(int[] array) {
//临时变量
int temp = 0;
//外层循环,判断我们这个要走多少次;
for (int i = 0; i < array.length - 1; i++) {
//通过flag标识位减少没有意义的比较
boolean flag = false;
//内层循环,比较判断两个数,如果第一个数,比第二个数大,则交换位置
for (int j = 0; j < array.length - 1 - i; j++) {
if (array[j+1] < array[j]) {
temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
flag = true;
}
}
if (flag==false) {
break;
}
}
return array;
}
每日Java面试题
一、Java中异常分类
按照异常处理时机:
编译时异常(受控异常(CheckdException))和运行时异常(非受控异常(UnCheckedException))
二、如何自定义异常
继承Exception是检查性异常,继承RuntimeException是非检查性异常,一般要复写两个构造方法,用throw抛出新异常
如果同时有很多异常抛出,那可能是异常链,就是一个异常引发另一个异常,另一个异常引发更多异常,一般我们会找它的原始异常来解决问题,一般会在开头或结尾,异常可通过initCause串起来,可以通过自定义异常。
三、Java中异常处理
首先处理异常主要有两种方式:一种try catch,一种是throws。
try catch:
-
try{} 中放入可能发生异常的代码。catch{}中放入堆捕获到异常之后的处理。
throw throws:
-
throw是语句抛出异常,出现于函数内部,用来抛出一个具体异常实例,throw被执行后面的语句不起作用,直接转入异常处理阶段。
-
throws是函数方法抛出异常,一般写在方法的头部,抛出异常,给方法的调用者进行解决。