java中的Comparable接口和冒泡排序、折半查找算法

Comparable接口

在这里插入图片描述

public int compareTo(Object o) {//按折扣进行比较
		Commodity good=(Commodity)o;
		if(this.discount>good.discount){
			return 1;
		}else if(this.discount<good.discount){
			return -1;
		}else
			return 0;
	}

常见算法

推荐学习算法网站:https://visualgo.net/en

一、冒泡排序算法
在这里插入图片描述
算法代码

//冒泡排序算法实现(从小到大排序)
	public static void bubbleSort1(int[] a){
		int temp;
		for(int i=0;i<a.length;i++)
			for(int j=0;j<a.length-1;j++){
				if(a[j]>a[j+1]){
					temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
				}
			}
	}

二、冒泡排序的优化算法
在这里插入图片描述
算法代码

	public static void bubbleSort2(int[] a){
		int temp;//中间变量
		
		//外层for循环:n个元素排序至少需要n-1趟循环
		for(int i=0;i<a.length-1;i++){
			//定义一个布尔型变量,标记数组是否已达到有序状态
			 boolean flag = true;
			 
			 //内层循环:相邻元素两两进行比较,比较到无序数组的最后
			 //一次外层循环会把无序数组的最大值交换到无序数组的最后
			for(int j=0;j<a.length-1;j++){
				//对于前面的无序数组执行if语句后会把flag赋值为false
				//对于后面的有序数组将不会执行该if语句
				if(a[j]>a[j+1]){//交换元素位置
					temp=a[j];
					a[j]=a[j+1];
					a[j+1]=temp;
					flag=false;//标记数组处于无序状态
				}	
			}
			//flag为false是继续循环,直到flag为ture
			//当此处flag为true时,表明整个数组处于有序状态,则执行以下if语句,退出循环
			if(flag){
				break;
			}
		}
	}

三、二分法查找(折半查找)
在这里插入图片描述二分法检索是一种比较高效的检索
在进行折半查找的时候需要先排序

算法代码

import java.util.Arrays;

public class Binary_Search {
	public static void main(String args[]){
		int[] a={18,5,36,22,23,18,11,12,24};
		Arrays.sort(a);
		System.out.println(Arrays.toString(a));
		System.out.println(binarySearch(a,23));//返回排序后23在数组中的索引位置
		
	}

	
	//折半查找
	public static int binarySearch(int[] array,int value){
		int left=0;
		int right=array.length-1;
		
		while (left<=right){
			int middle=(left+right)/2;
			
			if(value==array[middle]){
				return middle;  //返回value的索引位置
			}
			if(value>array[middle]){
				left=middle+1;
			}
			if(value<array[middle]){
				right=middle-1;
			}
		}
		return -1;   //while循环完毕,说明为查找到value,返回-1
	}
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

The Mutents

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

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

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

打赏作者

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

抵扣说明:

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

余额充值