如何通过一个数组的已知字母顺序 对另外一个数组的字母进行排序


如何通过一个数组的已知字母顺序 对另外一个数组的字母进行排序,比如a = [q,w,e,a,s] 现在有数组b=[w,a,q] 要求排序变成[q,w,a] 谢谢大家的指点。

java 算法

新世界的离群神 11 years, 7 months ago

具体实现 如@谢昌磊 所说, 对第一个数组做一个 map表 {字符 -> 下标}, 要比较第二个数组 两个元素的大小, 去查表 比较下标即可.

其实具体排序部分可以直接用库函数. 这里有一个pattern.
如c中的qsort(): http://www.cplusplus.com/reference/cs...

   
  void qsort (void* base, size_t num, size_t size,
  
int (*compar)(const void*,const void*));

或者java的Arrays.sort(),

   
  public static <T> void sort(T[] a, Comparator<? super T> c)
 

都只需给出 需排序的数组, 和 比较 数组元素大小的 回调函数即可.

compar(a, b) 和 Comparator.compare(a, b) 的 原理都是约定俗成的.
返回负数 表示 a排在b前, 0 表示相等, 正数 表示 a排在b后.

这里也是体现了程序设计的原则. 分离 不变的 和 变化的逻辑. 排序算法是固定的, 由库函数处理, 需排序的数组由用户提供, 数组元素的排序原则也由用户提供.

湯浅比呂美 answered 11 years, 7 months ago

Your Answer