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
}
}
运行结果: