java两种排序及二分查找

class SelectSort
{
	public static void main(String[] args) 
	{
		/*
			选择排序:元素1和元素2比,把用最大的值继续和第三个数比较。
	步骤:
		1定义一个数组:int[] arr = {2,4,5,7,1,3,0};//在栈内存创建一个int[]arr数组  
	再在堆 内存中创建 一块int类型数组区域,把首地址值赋给arr,arr把值根据索引通过地址值一一存储堆中的数组区域
		2:遍历数组,通过数组属性length获取到数组中的个数
		*/
		int[] arr = {2,4,5,7,1,3,0};
		System.out.println("遍历:");
		ergodic(arr);
		selectSort(arr);
		System.out.println("选择排序:");
		ergodic(arr);
		System.out.println("冒泡排序:");
		bubble(arr);-
		ergodic(arr);
		System.out.println("折半查找:");
		int value = 114;
		int a = geve(value,arr);
		/*
		if(a==-1){
			System.out.println(value+"不存在");
		}else{
			System.out.println(value+"在索引位置:"+a);
		}*/
		System.out.println(value+"在索引位置:"+a);
	}
	//选择排序
	public static void selectSort(int[] arr){
		//如1,2,32,11,4五个元素,-1:避免索引越界访问到最后一位。因为索引01234如果访问5则不存在。
		for(int a = 0; a < arr.length-1; a++){
			//b=0+1;b = 1+1; b = 2+1;
			for(int b = a+1; b < arr.length; b++){
				if(arr[b]<arr[a]){
					swap(arr,b,a);
				}
			}
		}
	}
	//遍历
	public static void ergodic(int[] arr){
		for(int a = 0; a < arr.length; a++){
			if(a!=arr.length-1){
				System.out.print(arr[a]+",");
			}else{
				System.out.println(arr[a]);
			}
		}
	}
	//冒泡排序
	public static void bubble(int[] arr){
		//减少一次判断,避免索引越界。
		for(int a = 0; a < arr.length-1; a++){
		//-1:避免角标访问到最后一个数(越界)。-a比较完一次就减少一个数(条件表达式)
			for(int b = 0; b < arr.length-1-a; b++){
				if(arr[b+1]>arr[b]){
					swap(arr,b,b+1);
				}
			}
		}
	}
	//换位功能
	public static void swap(int[] arr,int a ,int b){
		//采用^换行思想
		arr[a] = arr[a]^arr[b];
		arr[b] = arr[a]^arr[b];
		arr[a] = arr[a]^arr[b];
	}
	public static int geve(int by ,int[] arr){
		int min = 0;
		int max = arr.length-1;
		int mid = 0;
	
		//有折半可能
		while(min<=max){
			//求出中间值
			mid = (min+max)/2;
			//大于,说明就在中间索引  后面,前面不比较
			if(by>arr[mid]){	
				//中间H索引+1赋给 A索引
				min = mid+1;
				//小于,则在中间索引前边,后面不比较
			}else if(by<arr[mid]){
				//减掉最后一位数
				max = mid-1;
			}else{
				return mid;
				}
		}
		return -1;
	} 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值