排序,查找算法在面试的时候经常会被问起,那么如何把这个问题回答得有水平。
从以下几点考虑:
- 有经验的程序员==不重复发明轮子
- 如果一定要实现,那么代码需要具备一定的架构设计能力,可复用,可以解决同一类问题(轮子的设计)
- 基础扎实,考虑算法的时空复杂度(轮子的实现)
不重复发明轮子
Java基础类库已经提供了这些功能,大部分时候直接使用工具类。
Integer[] arr = { 2, 5, 4, 10, 3 };
// 升序排序
Arrays.sort(arr);
// 降序排序
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer lhs, Integer rhs) {
return rhs - lhs;
}
});
// 查找
int location = Arrays.binarySearch(arr, 10);
/** ------------------------- 集合操作 --------------------------- */
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(arr));
// 排序
Collections.sort(list);
// 查找
Collections.binarySearch(list, 10);
Set<Integer> set = new TreeSet<Integer>(list);
使用泛型实现快速排序
如果一定要实现,就参考JDK源码的参考模仿写一个,抽象出一个排序接口,参考Map的子接口SortMap的Sort接口设计,把一类问题抽象出来。
接口:
public interface Sorter {
/**
* 待排序数据需要实现Comparable接口
*/
<T extends Comparable<T>> void sort(T[] arr);
/**
*