20190724——数组(冒泡排序、直接插入排序)

3.数组
3.1.数组的概念
数组的概念:用于保存相同数据类型的多个变量的集合
3.2.使用数组的步骤
//1声明数组
数据类型[] 数组名称; 或 数据类型 数组名称[]; 一般通用第一种
int[] nums;
//2分配空间用于确定数组的容量 数组名称 = new 数据类型[数组大小]
nums = new int[10];
//3为数组元素赋值(利用数组元素的下标指定数组元素的位置)
数组名称[数组下标] = 值;
//数组的下标从0开始 ,数组下标的最大值,只能是容量-1
nums[2] = 23;
nums[3] = 45;
//4使用数组的元素信息(需要指定数组元素的下标来指定数组元素的某一个值)
int sum = nums[2] + nums[3];
System.out.println(“数组中第三个元素和第四个元素的和是”+sum);

3.3. 使用数组的其它写法和一些错误定义方式
//数组元素的一般正确的写法
//1声明数组和分配空间同时完成
int[] temp_num1 = new int[3];
//2声明数组分配空间和数组元素赋值同时完成
int[] temp_num2 = new int[]{34,56,78,90,12};
int[] temp_num3 = {34,212,34,667,89};
int[] temp_num4;
temp_num4 = new int[]{22,33,44,55};
//切记不可如下定义
//int[] temp_num5;
//temp_num5 = {22,33,44,55};
//int[] temp_num6 = new int[5]{34,56,78,98,21};

3.4.利用循环为数组元素赋值并求数组元素的最大值,最小值求和等日常操作
//数组元素的赋值,和使用一般使用的是循环的方法
Scanner input = new Scanner(System.in);
int[] scores= new int[5];
//一般使用for循环为数组元素赋值
//数组名称.length用于获取数组元素的大小
for(int i =0;i< scores.length;i++){
System.out.println(“请为第”+(i+1)+“同学输入成绩”);
scores[i] = input.nextInt();
}
System.out.println(“学生的成绩信息列表为”);
for(int i =0;i<scores.length;i++){
System.out.println(“成绩:” + scores[i]);
}

	//计算数组的中总成绩
	int total_sum = 0;
	for(int i =0;i<scores.length;i++){
		total_sum = total_sum +scores[i];
	}
	System.out.println("全班同学的总成绩是:"+ total_sum);
	
	//计算数组中的最大值
	int max = scores[0] ;  //默认数组中的第一个元素就是最大的
	//然后通过循环比较数组中的每一个元素和最大值之间的关系,如果数组中的元素值大于最大值中的数据,
	//则把数组中该元素的值保存起来
	for(int i =0;i <scores.length;i++){
		if(scores[i] >max){
			max = scores[i];
		}
	}
	System.out.println("数组中的最大值是:"+ max);
	//计算数组中的最小值(和最大值的计算方式相同)
	int min = scores[0];
	for(int i = 0;i<scores.length;i++){
		if(scores[i] <min){
			min = scores[i];
		}
	}
	System.out.println("该数组中最小的值是:"+ min);
	System.out.println("结束");

3.5.使用数组实现数组元素的增加,删除,修改,查找,排序,数组的扩容等复杂操作
3.5.1.数组在定义以后,对于数组元素是存在默认值的。
int类型数组默认值为0,double类型数组默认值为0.0 String类型数组默认值为null;
3.5.2.数组的基础操作
Scanner input = new Scanner(System.in);
//数组的初始数据
temps[0] =34;
temps[1] =23;
temps[2] =24;

	//实现数组元素内容的增加:首先必须要确定要添加的元素的位置,然后在该位置增加数据
	System.out.println("请输入要增加的数据");
	int addnum = input.nextInt();
	//从数组中查找可以添加的位置
	for(int i = 0;i<temps.length;i++){
		if(temps[i] == 0){
			temps[i] = addnum;
			break;
		}
	}
	
	//输出数组中的元素必须需要判断是否到了末尾
	for(int temp: temps){
		if(temp ==0)
			break;
		System.out.println(temp);
	}
	
	//数组元素中的查找
	System.out.println("请输入要查找的数据");
	int findnum = input.nextInt();
	boolean isHave = false;  //默认没有找到
	for(int i =0;i<temps.length;i++){
		if(temps[i] ==0){
			break;
		}
		if(temps[i] == findnum){
			isHave=true;  //设置为true;
			break;
		}
	}
	//根据变量的状态决定是否有
	if(isHave == true)
		System.out.println("存在");
	else
		System.out.println("不存在");
	
	//数组中元素的删除
	//1:需要查找要删除的元素的位置
	//2:从该位置往后,顺次前移后面的元素,然后把最后的一个元素置为默认值
	System.out.println("请输入要删除的元素值");
	int deletenum = input.nextInt();
	int index = -1;  //默认的位置为-1 表示没有此元素
	for(int i = 0;i< temps.length;i++){
		if(temps[i] == 0 )
			break;
		//判断元素是否存在,如果存在则记录该元素的位置
		if(temps[i] == deletenum){
			index = i;
			break;
		}
	}
	//判断是否存在
	if(index!=-1){
		//可以删除(在移动的过程中i最多能到倒数第二个元素,所以需要length -1)
		int lastIndex = 0;
		for(int i  =index; i<temps.length-1;i++){
			if(temps[i] == 0 )
				break;
			//把后一个元素,依次移动到前一个位置
			temps[i] = temps[i+1];
			lastIndex = i+1;
		}
		//把元素的最后一个位置的内容置为默认值:
		temps[lastIndex] = 0;
	}else{
		System.out.println("删除的数据在数组中不存在");
	}
	
	//删除后的结果是:
	System.out.println("删除后的结果");
	for(int temp: temps){
		if(temp ==0)
			break;
		System.out.println(temp);
	}

3.5.3.数组中的排序
把数组中的数据按着一定规律排列起来
排序的方式:冒泡排序,插入排序,选择排序
3.5.3.1.冒泡排序
N个数字来排队 两两相比小靠前
外层循环N-1 内层循环N-1-I
/*
N个数字来排队 两两相比小靠前
外层循环N-1 内层循环N-1-I
*/
int[] temp_nums = {34,67,89,21,45,89,80,32};
//外层循环N-1
for(int i = 0;i<temp_nums.length -1;i++){
//内层循环N-1-I
for(int j = 0;j<temp_nums.length-1-i;j++){
//比较规则: 两两(相邻的两个元素)相比小靠前
if(temp_nums[j] < temp_nums[j+1]){
int temp = temp_nums[j];
temp_nums[j] = temp_nums[j+1];
temp_nums[j+1] = temp;
}
}
}

3.5.3.2.插入排序(扑克牌算法)

	//插入排序
	//默认第一个已经是排序的数,从第二个数开始排
	for(int  i= 1;i<temp_nums.length;i++){
		int temp = temp_nums[i];
		//从当前需要排序的元素往前比较
		int j = i-1;
		while(j>=0&&temp_nums[j]<temp){
			//符合规则,把前面的元素往后一位移动
			temp_nums[j+1] =temp_nums[j];
			j--;
		}
		temp_nums[j+1] = temp;
	}

3.5.3.3.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值