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;
}
}