java学习记录day4

数组冒泡排序法

当数组有n个元素时,进行n-1轮排序,从第一位元素开始,与其后一位元素相比较,若小于(大于)等于后者则不动,若大于(小于)后者则二者交换位置,然后第二位第三位依次比较直至最后一位,这样交换一轮过后,数组的最后一位应该是最大(小)的那个。第二轮得到的最后两位的正确位置,进行n-1轮后,可以得到后n-1位的正确位置,那只剩下的第一位肯定也是正确的。是比较稳定的排序方法。
以极端情况为例,数组{6,5,4,3,2,1}(从小到大排序):
第一轮比较结束:5,4,3,2,1,6;
第二轮比较结束:4,3,2,1,5,6;
第三轮比较结束:3,2,1,4,5,6;
第三轮比较结束:2,1,3,4,5,6;
第三轮比较结束:1,2,3,4,5,6;

int[] num = {6,5,4,3,2,1};
int len = mun.length;
for(int i = 0;i < len-1;i++)//i控制循环次(轮)数
{
	for(int j = 0;j < len - 1 - i;j++)//j控制每轮比较次数
	{//后几位排好后就不需要在排序了,所以为了减少循环次数每排少比较i次
		if(mun[j] > mun[j+1])
		{
			mun[j] = mun[j] + mun[j+1];
			mun[j+1] = mun[j] - mun[j+1];
			mun[j] = mun[j] - mun[j+1];
		}
	}
}

选择排序法

每一轮从待排序的数据中选出最小的(最大)的元素,放在已排好顺序的元素的最后,直到全部排完。选择排序是不稳定的排序方法。

int[] num = {6,5,4,3,2,1};
int len = mun.length,flag;
for(int i = 0;i < len;i++)
{//排到了第几位
	flag = 99999;//flag标记当前最小元素,以一个大数初始化避免初始化的数排进数组中
	for(int j = i;j < len;j++)
	{//选第i位
		if(flag >mun[j])
		{
			flag = mun[i];
		}
	}
	mun[i] = flag;
}

二分查找法

在意排好序的数组中,通过将待查找的元素与中间索引值对应的元素进行比较,若大于则去右边继续以此法方查找,否则去左边,直到找到为止,若未找到则返回一个负数。
例如:在int[] nums = {1,3,5,8,9,16,18,19,35,48,59}中间查找48.
共11个元素,于是先找nums[5],16<48,所以到右边找;
(6+10)/2 = 8,于是查看nums[8],35<48,继续找右边;
(9+10)/2 = 9,于是查看nums[9],48=48,找到,返回下标9.

Arrays工具类

用来操作数组的类,包含了各种方法。
常用法方:
二分查找法:

	Arrays.binarySearch(int[] arrays,int value);
	//arrays:要查找的数组,value:要查找的值;

数组排序:

	Arrays.sort(int[] arrays);

将数组内容转变为字符串输出:

Arrays.toString(int[] arrays);

复制指定数组:

Arrays.copyOf(int[] arrays ,int length);
//从arrays的第一位开始复制长度为length的数据
Arrays.copyOf(int[] arrays ,int from ,int to);
//从arrays中复制第from到to位的数据

判断两个数组是否相等:

Arrays.equels(int[] arrays1 ,int[] arrays2);

使用指定元素填充数组:

Arrays.fill(int[] arrays ,int val);
Arrays.fill(int[] arrays ,int formIndex ,int toIndes ,int val);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值