2020.10.14(15~17)

15. 递归的定义和优缺点

  • 递归算法是一种直接或者间接地调用自身算法的过程。在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解。
  • 递归算法解决问题的特点:
    • 递归就是在过程或函数里调用自身
    • 在使用递归策略时,必须有一个明确的递归结束条件,成为递归出口
    • 递归算法解题通常显得很简洁,但运行效率较低。所以一般不提倡用递归算法设计程序
    • 在递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序

16.数组的特征

  • 数组是(相同类型数据)的(有序)(集合)
  • 数组会在内存中开辟一块连续的空间,每个空间相当于之前的一个变量,称为数组的元素element
  • 元素的表示 数组名[下标或者索引] scores[7] scores[0] scores[9]
  • 索引从0开始
  • 每个数组元素有默认值 double 0.0; boolean false; int 0
  • 数组元素有序的,不是大小顺序,是索引的顺序
  • 数组中可以存储基本数据类型,可以存储引用数据类型;但是对于一个数组而言,数组的类型是固定的,只能是一个
  • length:数组的长度
  • 数组的长度是固定的,一经定义,不能再发生变化(数组的扩容)

17.请写出冒泡排序代码

  • 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
  • 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
  • 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
  • 冒泡排序算法的原理如下:
  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的
    数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
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");
       }
   }
}
posted @ 2020-10-15 14:21  xiaokai9527  阅读(43)  评论(0)    收藏  举报