ugly but fast:
list2[[Ordering[list2[[All, 1]]][[Ordering[Ordering[list1[[All, 1]]]]]]]]
{{A, 4}, {B, 5}, {C, 1}}
even faster:
result = list2; result[[Ordering[list1[[All, 1]]]]] = SortBy[list2, First]; result
{{A, 4}, {B, 5}, {C, 1}}
benchmarks
s = 10^7; list1 = Transpose[{PermutationList@RandomPermutation[s], RandomInteger[{0, 10}, s]}]; list2 = Transpose[{PermutationList@RandomPermutation[s], RandomInteger[{0, 10}, s]}]; (* my first solution *) result1 = list2[[Ordering[list2[[All, 1]]][[Ordering[Ordering[list1[[All, 1]]]]]]]]; //AbsoluteTiming//First (* 8.6416 *) (* my second solution *) result2 = Module[{L}, L = list2; L[[Ordering[list1[[All, 1]]]]] = SortBy[list2, First]; L]; //AbsoluteTiming//First (* 6.89593 *) (* MikeY's solution *) result3 = Permute[list2, FindPermutation[list2[[All, 1]], list1[[All, 1]]]]; //AbsoluteTiming//First (* 15.808 *) (* Henrik Schumacher's solution *) result4 = Module[{idx, L}, idx = Lookup[AssociationThread[list1[[All, 1]] -> Range[Length[list1]]], list2[[All, 1]]]; L = list2; L[[idx]] = list2; L]; //AbsoluteTiming//First (* 31.7412 *) (* make sure all methods agree *) result1 == result2 == result3 == result4 (* True *)
list2should be sorted according to the first column oflist1$\endgroup$Sort[list2]give the desired output? $\endgroup$list2[[OrderingBy[list1, -#[[2]] &]]]in the next release... $\endgroup$