20200714学习内容 数组,冒泡排序和折半查找

一 数组

1.概念: 所谓的数组指的就是一组相关类型的变量集合,并且这些变量可以按照统一的方式进行操作。数组本身 属于引用数据类型,那么既然是引用数据类型,这里面实际又会牵扯到内存分配,数组变量是引用地 址)型变量

2.数组相关概念

        数组名
        元素
        角标、下标、索引
        数组的长度:元素的个数 length
3.数组的特点:
        数组是有序排列的
        数组属于引用数据类型的变量。数组的元素,可以是基本数据类型,也可以是引用数据类型
        创建数组对象会在内存中开辟一整块连续的空间
        数组的长度一旦确定,就不能更改。
4.数组的分类
        按照维数:一维数组、二维数组、... ...
        按照数组元素的类型:基本数据类型元素的按钮、引用类型元素的数组
5 数组的定义
 1 、声明并开辟数组
元素类型 [] 数组名 = new 元素类型 [ 元素个数或数组长度 ];
示例: int [] arr = new int [ 5 ];
初始化操作
arr [ 0 ] = 10 ;
2、静态初始化数组
     数组先开辟内存空间,而后再使用索引进行内容的设置,实际上这种做法都叫做动态初始化,而如果希 望数组在定义的时候可以同时出现设置内容,那么就可以采用静态初始化完成。
元素类型 [] 数组名 = new 元素类型 []{ 元素,元素, …… };
int [] arr = new int []{ 3 , 5 , 1 , 7 };
int [] arr = { 3 , 5 , 1 , 7 };
注:使用new关键字分配内存时,简单类型的数组中的元素都有初始值
数组元素的默认初始化值
数组元素是整型:0
数组元素是浮点型:0.0
数组元素是char型:0或'\u0000',而非'0'
数组元素是boolean类型:false,Oracle的JVM中采用byte[]方式进行存储

二 冒泡排序

1.算法说明

1)比较相邻的元素。如果第一个比第二个大,就交换它们两个。
2)对每一对相邻的元素都进行比较,等所有的比较完后最后一个数字是这堆数据里的最大数字。
3)重复步骤一,直到排序完成

2.冒泡排序 时间复杂度为O( n^2 );空间复杂度为O(n);,是稳定的算法。

3.源码

public static void main(String[] args) {
		//冒泡排序方法
		long s1=System.currentTimeMillis();
		double[] arr= {12.9,53.54,75.0,99.1,3.14};
		for(int k=1;k<arr.length;k++) {
			for(int i=0;i<arr.length-k;i++) {
				if(arr[i]>arr[i+1]) {
					double tmp =arr[i];
					arr[i]=arr[i+1];
					arr[i+1]=tmp;
				}
			}
		}
		long e1=System.currentTimeMillis();
		System.out.println("排序用时为"+(e1-s1)+"ms");
		for(double tmp:arr) {
			System.out.print(tmp+"\t");
		}
		
	}

三 折半查找

1.定义

折半查找法:在计算机科学中,折半搜索,也称二分搜索(英语:binary search)、对数搜索,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

 2.条件 数组有序 

3.源码

package com.chang2;

public class 练习 {

	public static void main(String[] args) {
		// 折半查找
		//产生随机数
		int []arr =new int[21];
		for(int i=1;i<arr.length;i++) {
			int r =(int)(Math.random()*100);
			arr[i]=r;
		}
		arr[0]=33;
				//冒泡排序
				for(int i=1;i<arr.length;i++) {
					for(int k=0;k<arr.length-i;k++) {
						if(arr[k]>arr[k+1]) {
							int tmp=arr[k];
							arr[k]=arr[k+1];
							arr[k+1]=tmp;
						}
					}
				}
				
				for(int tmp : arr)
					System.out.print(tmp+" ");
				System.out.println();
				
				//折半查找
				int target =33;
				int pos= -1;
				int m1=0;
				int m2=arr.length-1;
				boolean flag=false;
				
				while(m1<m2) {
					pos=(m1+m2)/2;
				if(arr[pos]>target) {
					m2=pos-1;
				}else if(arr[pos]<target) {
					m1=pos+1;
				}else {
					flag=true;
					break;
				}
			}
		if(flag)
		System.out.println(pos+"::"+arr[pos]);
		else
			System.out.println("找不到");
	
	
	}
	
	
		}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值