2012-07-26 3 views
0

J'ai une étrange question: Quelle est la meilleure puce/façon de commander un tableau de nombre comme celui-cigamme particulière de tri

[1,1,2,2,3,3,4,4] 

à cette

[1,2,3,4,1,2,3,4] 

L'idée est d'équilibrer la liste afin de donner une sorte de priorité à chaque élément de la liste. Langue pourrait être php, il importe que beaucoup

+0

Est-ce devoir? –

+0

Quelle langue est-ce? –

+0

S'il vous plaît ajouter la langue que vous utilisez comme une balise, de sorte qu'il sera facile de répondre. – Narendra

Répondre

1

permet de dire que nous avons [1,1,2,2,2,2,3,3] Prenez la première série de nombres égaux et le mettre dans des tableaux séparés (verticalement)

1 1 

de même pour la deuxième série de nombres égaux et ainsi de suite

1 1 
2 2 2 2 
3 3 3 

Concat les tableaux pour obtenir le résultat

[1,2,3][1,2,3][2,3][2] 
+0

C'est intéressant, et de concaténer les tableaux verticalement? La seule façon que je peux penser est d'itérer, ou de créer une matrice avec la longueur de la taille maximale d'un tableau et la hauteur du nombre de tableaux. –

0

Effectuez une itération sur chaque élément de votre tableau et copiez-le dans un second tableau, où chaque élément comprend également une deuxième clé de tri qui est le numéro de séquence.

permet d'appeler votre tableau d'entrée A.

First So: Trier A

Puis: itérer sur A et copier chaque élément dans un nouveau tableau B, où chaque élément a une deuxième clé de tri, appelez key1 et key2. Key1 est la valeur de A, key2 est le numéro de séquence.

A: 1,1,2,2,3,3,4,4 
B: (1,1),(1,2),(2,1),(2,2),(3,1),(3,2),(4,1),(4,2) 

maintenant créer une fonction de comparaison pour les éléments de B qui ordonne d'abord sur key2 puis sur key1:

bool isSmallerThan(x, y) 
{ 
    if (x.key2 < y.key2) return true; 
    if (x.key2 > y.key2) return false; 
    if (x.key1 < y.key1) return true; 
    return false; 
} 

Maintenant sorte B en utilisant la nouvelle fonction de comparaison.

itérer sur B et copiez tous les key1s retour dans A.