15. 递归的定义和优缺点
- 递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
- 递归算法解决问题的特点:
- 递归就是在过程或函数里调用自身
- 在使用递归策略时,必须有一个明确的递归结束条件,成为递归出口
- 递归算法解题通常显得很简洁,但运行效率较低。所以一般不提倡用递归算法设计程序
- 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序
16.数组的特征
- 数组是(相同类型数据)的(有序)(集合)
- 数组会在内存中开辟一块连续的空间,每个空间相当于之前的一个变量,称为数组的元素element
- 元素的表示 数组名[下标或者索引] scores[7] scores[0] scores[9]
- 索引从0开始
- 每个数组元素有默认值 double 0.0; boolean false; int 0
- 数组元素有序的,不是大小顺序,是索引的顺序
- 数组中可以存储基本数据类型,可以存储引用数据类型;但是对于一个数组而言,数组的类型是固定的,只能是一个
- length:数组的长度
- 数组的长度是固定的,一经定义,不能再发生变化(数组的扩容)
17.请写出冒泡排序代码
- 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
- 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
- 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
- 冒泡排序算法的原理如下:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的
数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
![]()
public class Bubble {
public int[] sort(int[] array) {
int temp = 0;
// 外层循环,它决定一共走几趟 //-1为了防止溢出
for (int i = 0; i < array.length - 1; i++) {
int flag = 0; //通过符号位可以减少无谓的比较,如果已经有序了,就退出循环
//内层循环,它决定每趟走一次
for (int j = 0; j < array.length - i - 1; j++) {
//如果后一个大于前一个,则换位
if (array[j + 1] > array[j]) {
temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
flag = 1;
}
}
if(flag == 0){
break;
}
}
return array;
}
public static void main(String[] args) {
Bubble bubble = new Bubble();
int[] array = {2,5,1,6,4,9,8,5,3,1,2,0};
int[] sort = bubble.sort(array);
for (int num:sort){
System.out.print(num+"\t");
}
}
}