package cn.by.Collecion.home0818;
import java.util.Comparator;
/**
*
*排序类
*/
public class Sort {
/**
* 根据元素的自然顺序 对指定列表按升序进行排序。
* 冒泡,从小到大排序
* @param obj 要排序的数组
*/
public static void sort(Object[] obj) {
if(obj == null)
throw new NullPointerException();
/**
*主要用于提前结束比较,即如果一趟中没有一个元素交换, 则后面还没有进行的趟也不用进行了。
*/
int exchange = 0;
// 临时交换变量
Object temp;
Comparable comparable;
//System.out.println(obj.length);
for (int i = 0; i < obj.length - 1; i++) {
exchange = 0; //初始值为0
for (int j = obj.length - 1; j > i; j--) {
//强转
comparable = (Student) obj[j];
//比较
if (comparable.compareTo(obj[j - 1]) < 0) {
temp = obj[j];
obj[j] = obj[j - 1];
obj[j - 1] = temp;
exchange = 1; // 如有交换则更改为1
}
}
// 提前结束
if (exchange == 0)
return;
}
}
/**
* 根据指定比较器产生的顺序对指定列表进行排序 ,此列表内的所有元素都必须可使用指定比较器相互比较
* @param obj 要排序的数组
* @param comparator 指定的比较器
*/
public static void sort(Object[] obj, Comparator comparator) {
if (obj == null)
throw new NullPointerException();
/**
*主要用于提前结束比较,即如果一趟中没有一个元素交换, 则后面还没有进行的趟也不用进行了。
*/
int exchange = 0;
// 临时交换变量
Object temp;
int result;
for (int i = 0; i < obj.length - 1; i++) {
exchange = 0; // 初始值为0
for (int j = obj.length - 1; j > i; j--) {
result =comparator.compare( obj[j],obj[j - 1] ) ;
// 比较
if (result < 0) {
temp = obj[j];
obj[j] = obj[j - 1];
obj[j - 1] = temp;
exchange = 1; // 如有交换则更改为1
}
}
// 提前结束
if (exchange == 0)
return;
}
}
}
package cn.by.Collecion.home0818;
import java.util.Comparator;
/**
*
*二分查找类
*/
public class BinarySearch {
/**
* 二分搜索
* @param obj 要搜索的数组
* @param argkey 要搜索的元素
* @return 返回索引,如果找不到则返回-1
*/
public static int binarySearch(Object[] obj, Object argkey ) {
if(obj == null || argkey == null)
throw new NullPointerException();
int low = 1;
int high = obj.length;
int mid;
int result;
Comparable comparable;
while(low <= high) {
mid = (low + high)/2;
comparable = (Student)argkey;
//第一个元素为arykey
result = comparable.compareTo(obj[mid - 1]);
if(result == 0)
return mid;
else if(result < 0)
high = mid - 1;
else
low = mid + 1;
}
//没找到
return -1;
}
/**
* 二分搜索
* @param obj 要搜索的数组
* @param argkey 要搜索的元素
* @return 返回索引,如果找不到则返回-1
* @param comparator 指定比较器(即指定元素相等规则)
*/
public static int binarySearch(Object[] obj, Object argKey, Comparator comparator ) {
if(obj == null || argKey == null)
throw new NullPointerException();
// System.out.println(argKey);
int low = 1;
int high = obj.length;
int mid;
int result;
while(low <= high) {
mid = (low + high)/2;
// System.out.println("mid="+mid);
//第一个元素为arykey
result = comparator.compare(argKey,obj[mid - 1]);
if(result == 0)
return mid;
else if(result < 0){
high = mid - 1;
//System.out.println("high="+high);
}
else {
low = mid + 1;
// System.out.println("low="+low);
}
}
//没找到
return -1;
}
}