No tanto es un array (que supongo sería útil para enviar el orden final, pero ni siquiera indispensable), sino un select:
Código:
<select name="ListaOrigen" size="10" style="width:150" multiple>
<%
set adoRs = Server.CreateObject("adodb.recordset")
vSQL = "SELECT * FROM TbOrigen order by Descripcion"
adoRs.Open vSQL, Cnn
While Not adoRs.EOF%>
<option value="<%=adoRs("id")%>"><%=adoRs("Descripcion")%></Option>
<%adoRs.MoveNext
Wend
adoRs.Close
%>
</select>
Ahora, por medio de un botón, el elemento o elementos que tenga seleccionados, los trasladas a otra lista vacia. con algo como:
Código:
Elemento = document.forms[0].ListaOrigen.options[document.forms[0].ListaOrigen.selectedIndex].text
Forma.ListaNueva.options[Forma.ListaNueva.length]=Elemento;
Claro, si selecciona varios, debes de recorrerlos uno a uno.
Para enviar la lista ordenada, puedes hacerlo de varias formas: una de ellas podría ser una cadena con algun separador que tenga el id, la posición secuencial de ese id, sería el nuevo orden.
Solo son ideas.
Saludos