java算法: 冒泡排序 + 选择排序 + 二分法查找

本文介绍了几种常见的排序算法(冒泡排序、选择排序)及其优化,并详细讲解了二分查找算法的实现过程。这些算法适用于数值型数组且数组需预先排序。

二分法查找:(前提: 1,数值型数组; 2,必须 ---升序或降序)

public static int find(int[] arr,int val) {
	//查找--下标
	int start=0;
	int end=arr.length-1;
	int mid=(start+end)/2;
		
	while(start<end) {
		if(arr[mid]==val) {
			return mid;
		}else if(arr[mid]>val) {
			end=mid-1;
		}else {
			start=mid+1;
		}
		
		mid=(start+end)/2;//更新中间位置下标
	}
	return -1;//没找到
}

冒泡排序:

//冒泡排序:内层重复循环
public static void bubbleSort(int[] arr) {
	
	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]) {
		    arr[j]=( arr[j+1] = arr[j]+arr[j+1] )-arr[j];//a=和-a
		    arr[j+1]=arr[j+1]-arr[j];//b=和-b
		  }
	    }	
	}
}

选择排序:

//选择排序:  从前往后,保存最大的值
private static void selectSort(int[] arr) {
	for (int i = 0; i < arr.length-1; i++) {
		for (int j = i+1; j < arr.length-1; j++) {
		//取出外层的值--挨次比较大小,收取单次循环的最大值
	           if(arr[i]<arr[j]) {
        		arr[j]=( arr[i] = arr[i]+arr[j] )-arr[j];//a=和-a
			arr[i]=arr[i]-arr[j];//b=和-b
	            }
	       }
        }
}
	

 

//选择排序: 优化版
private static void selectSort(int[] arr) {
	for (int i = 0; i < arr.length - 1; i++) {
			
		int maxIndex=i;//默认下标i处: 为max
		for (int j = i + 1; j < arr.length - 1; j++) {
				
			// 取出外层的值--挨次比较大小,收取单次循环的最大值
			if (arr[i] < arr[j]) {
				if(arr[maxIndex]<arr[j]) {
					maxIndex=j;//保存: 最大值的下标
				}
			}
		} // 内for

		// 判断: 是否发生了比较: index是否变化---交换两个值
		if(maxIndex!=i) {
			arr[maxIndex] = (arr[i] = arr[i] + arr[maxIndex]) - arr[maxIndex];// a=和-a
			arr[i] = arr[i] - arr[maxIndex];// b=和-b
		}
			
	}//外for
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

根哥的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值