Java学习从基础到精通——技术小白的成长之路(Java学习笔记)第六天

数组的复制、数组的排序、冒泡排序详解、方法、计算算法的效率的一个方法

1.数组:

  1)数组的复制:

   1.1)System.arraycopy(a,1,a1,0,4);

1.2)int[] a1 = Arrays.copyOf(a,6);

    a = Arrays.copyOf(a,a.length+1);

  2)数组的排序:

 2.1)Arrays.sort(arr); //升序

2.2)冒泡排序:

   2.2.1)五个数冒四轮

2.2.2)每一轮都是从第1个元素开始冒

      每一次都是和它的下一个元素比

2.2.3)冒出来的就不带它玩了

冒泡排序运行过程分析:

i=0

  j=0 45和23比,换,23,45,1,8

  j=1 45和1比,换,23,1,45,8

  j=2 45和8比,换,23,1,8,45-------45

i=1

  j=0 23和1比,换,1,23,8,45

  j=1 23和8比,换,1,8,23,45-------23

i=2

  j=0 1和8比,不换-----------------8

第一轮:

  45和23比,换,23,45,1,8

  45和1比,换,23,1,45,8

  45和8比,换,23,1,8,45--------------45冒出来了

第二轮:

  23和1比,换,1,23,8,45

  23和8比,换,1,8,23,45--------------23冒出来了

第三轮:

  1和8比,不换------------------------8冒出来了

    arr.length-1-i

i=0 比3次

i=1 比2次

i=2 比1次

 

冒泡排序代码详解:

int[] arr = {45,23,1,8}; //升序排列(1,8,23,45)

for(int i=0;i<arr.length-1;i++){ //控制轮

  for(int j=0;j<arr.length-1-i;j++){ //控制次

    if(arr[j]>arr[j+1]){

  int t=arr[j];

  arr[j]=arr[j+1];

  arr[j+1]=t;

}

  }

}

 

 

2.方法:

  1)封装一段特定的业务逻辑功能

  2)方法尽可能独立,只干一件事

  3)方法可以被反复多次的调用

  4)减少代码的重复,有利于代码的维护,有利于团队的协作

3.方法的定义:

    修饰词 返回值类型 方法名(参数列表){

  方法体

}

4.方法的调用:

  1)无返回值: 方法名(有参传参);

  2)有返回值: 数据类型 变量 = 方法名(有参传参);

方法可以有参也可以无参,有参可以使方法更灵活

 

 

double c = Math.random(); //0.0到0.9999999999999...

 

double c = Math.random(1,1000);

double c = Math.random(0,99);

double c = Math.random(20,45);

 

MethodDemo

 

 

 

 

System.out.         println("hello");

System.             arraycopy(a,1,a1,0,4);

Arrays.             sort(arr);

int[] a1 = Arrays.  copyOf(a,6);---------------有参

 

int    a = scan.    nextInt();

double b = scan.    nextDouble();

double c = Math.    random();------------------无参

 

方法可能有返回值也可以没有返回值:

1)若无返回值,则返回值类型写成void

2)若有返回值,则返回值类型写成具体的数据类型即可

 

何时有返回值,何时没有返回值:

 方法执行完后:

  1)还需要用到方法中的某个数据------有返回值

  2)不需要用到方法中的某个数据------无返回值

 

System.out.println("hello");

System.arraycopy(a,1,a1,0,4);

Arrays.sort(arr);-----------------------无返回值

 

int    a = scan.nextInt();

double b = scan.nextDouble();

double c = Math.random();

int[] a1 = Arrays.copyOf(a,6);----------有返回值

注意要点:

1)有参必须传参,并且参数类型必须匹配

2)有返回值必须return,并且return后的值必须与返回值类型匹配

3)调用方的变量名与方法中的变量名-----没有任何关系

4)方法可以嵌套调用

 

计算算法的效率的一个方法:

long a = System.currentTimeMillis();

要求效率的方法写在中间

long b = System.currentTimeMillis();

 

System.out.println(b-a);

5.return:

  1)return 值; //1.1)结束方法的执行 1.2)返回结果给调用方

    -------------------用在有返回值的方法中

  2)return;    //2.1)结束方法的执行

    -------------------用在无返回值的方法中

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在信号处理领域,DOA(Direction of Arrival)估计是一项关键技术,主要用于确定多个信号源到达接收阵列的方向。本文将详细探讨三种ESPRIT(Estimation of Signal Parameters via Rotational Invariance Techniques)算法在DOA估计中的实现,以及它们在MATLAB环境中的具体应用。 ESPRIT算法是由Paul Kailath等人于1986年提出的,其核心思想是利用阵列数据的旋转不变性来估计信号源的角度。这种算法相比传统的 MUSIC(Multiple Signal Classification)算法具有较低的计算复杂度,且无需进行特征值分解,因此在实际应用中颇具优势。 1. 普通ESPRIT算法 普通ESPRIT算法分为两个主要步骤:构造等效旋转不变系统和估计角度。通过空间平移(如延时)构建两个子阵列,使得它们之间的关系具有旋转不变性。然后,通过对子阵列数据进行最小二乘拟合,可以得到信号源的角频率估计,进一步转换为DOA估计。 2. 常规ESPRIT算法实现 在描述中提到的`common_esprit_method1.m`和`common_esprit_method2.m`是两种不同的普通ESPRIT算法实现。它们可能在实现细节上略有差异,比如选择子阵列的方式、参数估计的策略等。MATLAB代码通常会包含预处理步骤(如数据归一化)、子阵列构造、旋转不变性矩阵的建立、最小二乘估计等部分。通过运行这两个文件,可以比较它们在估计精度和计算效率上的异同。 3. TLS_ESPRIT算法 TLS(Total Least Squares)ESPRIT是对普通ESPRIT的优化,它考虑了数据噪声的影响,提高了估计的稳健性。在TLS_ESPRIT算法中,不假设数据噪声是高斯白噪声,而是采用总最小二乘准则来拟合数据。这使得算法在噪声环境下表现更优。`TLS_esprit.m`文件应该包含了TLS_ESPRIT算法的完整实现,包括TLS估计的步骤和旋转不变性矩阵的改进处理。 在实际应用中,选择合适的ESPRIT变体取决于系统条件,例如噪声水平、信号质量以及计算资源。通过MATLAB实现,研究者和工程师可以方便地比较不同算法的效果,并根据需要进行调整和优化。同时,这些代码也为教学和学习DOA估计提供了一个直观的平台,有助于深入理解ESPRIT算法的工作原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值