查找和排序
折半查找
//折半查找法1(String--compareTo方法)
public static int halfSearch(List<String> list, String key) {
int max, min, mid;
max = list.size() - 1;
max = list.size() - 1;
min = 0;
while (min <= max) {
mid = (max + min) >> 1;
String str = list.get(mid);
int num = str.compareTo(key);
if (num > 0)
max = mid - 1;
else if (num < 0)
min = mid + 1;
else
return mid;
}
return -min - 1;
}
//折半查找法2(比较器:Comparator)
public static int halfSearch2(List<String> list, String key, Comparator<String> cmp){
int max, min, mid;
max = list.size() - 1;
min = 0;
while (min <= max) {
mid = (max + min) >> 1;
String str = list.get(mid);
int num = cmp.compare(str, key);
if (num > 0)
max = mid - 1;
else if (num < 0)
min = mid + 1;
else
return mid;
}
return -min - 1;
}
选择排序
//选择排序(对给定数组排序)
public static void selectSort(int[] arr){
for(int x=0; x<arr.length-1; x++){
for(int y=x+1; y<arr.length; y++){
if(arr[x]>arr[y]){
swap(arr,x,y);
}
}
}
}
public static void swap(int[] arr, int a, int b){
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
冒泡排序
//冒泡排序(对给定数组排序)
public static void bubbleSort(int[] arr){
for(int x=0; x<arr.length-1; x++){
for(int y=0; y<arr.length-x-1; y++){
if(arr[y]>arr[y+1]){
swap(arr,y,y+1);
}
}
}
}
折半查找
//折半查找。前提要保证该数组是有序的数组。
public static int halfSearch(int[] arr, int key){
int min = 0, max = arr.length-1, mid;
while(min<=max){
mid = (min+max) >> 1;
if(key>arr[min]){
min = mid + 1;
}else if(key<arr[max]){
max = mid - 1;
}else{
return mid;
}
}
return -1;//返回值-1代表要找的数字key没有找到。
}