3 Adjusted for arbitrarily specified order
source | link
expr = a b c h;

You need to inactivate Times to keep the factors from automatically being put in canonical order.

expr2 = Inactive[Times] @@ 
  Flatten[Reverse /@ Partition[List @@ expr, 2]]

enter image description here

expr == (expr2 // Activate)

(* True *)

EDIT: For an arbitrarily specified order

expr2 = Inactive[Times] @@ (List @@ expr)[[{2, 1, 4, 3}]]

For the example given in your comment,

expr3 = a*b*c*h + d*f*g*h;

expr4 = Inactive[Times] @@ (List @@ #)[[{2, 1, 4, 3}]] & /@ expr3

enter image description here

expr = a b c h;

You need to inactivate Times to keep the factors from automatically being put in canonical order.

expr2 = Inactive[Times] @@ 
  Flatten[Reverse /@ Partition[List @@ expr, 2]]

enter image description here

expr == (expr2 // Activate)

(* True *)

EDIT: For an arbitrarily specified order

expr2 = Inactive[Times] @@ (List @@ expr)[[{2, 1, 4, 3}]]
expr = a b c h;

You need to inactivate Times to keep the factors from automatically being put in canonical order.

expr2 = Inactive[Times] @@ 
  Flatten[Reverse /@ Partition[List @@ expr, 2]]

enter image description here

expr == (expr2 // Activate)

(* True *)

EDIT: For an arbitrarily specified order

expr2 = Inactive[Times] @@ (List @@ expr)[[{2, 1, 4, 3}]]

For the example given in your comment,

expr3 = a*b*c*h + d*f*g*h;

expr4 = Inactive[Times] @@ (List @@ #)[[{2, 1, 4, 3}]] & /@ expr3

enter image description here

2 Adjusted for arbitrarily specified order
source | link
expr = a b c h;

You need to inactivate Times to keep the factors from automatically being put in canonical order.

expr2 = Inactive[Times] @@ 
  Flatten[Reverse /@ Partition[List @@ expr, 2]]

enter image description here

expr == (expr2 // Activate)

(* True *)

EDIT: For an arbitrarily specified order

expr2 = Inactive[Times] @@ (List @@ expr)[[{2, 1, 4, 3}]]
expr = a b c h;

You need to inactivate Times to keep the factors from automatically being put in canonical order.

expr2 = Inactive[Times] @@ 
  Flatten[Reverse /@ Partition[List @@ expr, 2]]

enter image description here

expr == (expr2 // Activate)

(* True *)
expr = a b c h;

You need to inactivate Times to keep the factors from automatically being put in canonical order.

expr2 = Inactive[Times] @@ 
  Flatten[Reverse /@ Partition[List @@ expr, 2]]

enter image description here

expr == (expr2 // Activate)

(* True *)

EDIT: For an arbitrarily specified order

expr2 = Inactive[Times] @@ (List @@ expr)[[{2, 1, 4, 3}]]
1
source | link

expr = a b c h;

You need to inactivate Times to keep the factors from automatically being put in canonical order.

expr2 = Inactive[Times] @@ 
  Flatten[Reverse /@ Partition[List @@ expr, 2]]

enter image description here

expr == (expr2 // Activate)

(* True *)