直接记录一段代码
package searchandsort; public class SortingAndSearch<T extends Comparable<T>> { /** * 线性查找 * @param data 数组对象 * @param min 起始索引 * @param max 结束索引 * @param target 查找目标 * @return 是否查找到 */ public boolean linearSearch(T[] data, int min, int max, T target) { int index = min;; boolean found = false; while (!found && index <= max) { if (data[index].compareTo(target) == 0) { found = true; break; } index++; } return found; } //二分查找 public boolean binarySearch(T[] data, int min, int max, T target) { boolean found = false; int mid = (max + min) / 2; //中间 if (data[mid].compareTo(target) == 0) { //找到了 found = true; } else if (data[mid].compareTo(target) > 0) { if (min <= mid - 1) { found = binarySearch(data, min, mid-1, target); //左边递归 } } else { if (mid + 1 <= max) { found = binarySearch(data, mid+1, max, target); //左边递归 } } //1 4 1 1 return found; } //选择排序 public void selectionSort(T[] data) { int min, len = data.length; T temp; for (int index = 0; index < len - 1; index++) { min = index; for (int scan = index + 1; scan < len; scan++) { if (data[scan].compareTo(data[min]) < 0) { min = scan; } } if (index != min) { temp = data[min]; data[min] = data[index]; data[index] = temp; } } } static class Contact implements Comparable<Contact> { public String firstName, lastName; public Contact(String firstName, String lastName) { super(); this.firstName = firstName; this.lastName = lastName; } @Override public int compareTo(Contact o) { int res; if (lastName.equals(o.lastName)) { res = firstName.compareTo(o.firstName); } else { res = lastName.compareTo(o.lastName); } return res; } @Override public String toString() { return "Contact [firstName=" + firstName + ", lastName=" + lastName + "]"; } } }