2011-07-20 5 views
1

Je fais un tri simple en ruby ​​mais je trierai par ordre décroissant. Cela me déroute parce que cela fonctionne pour toutes mes données sauf pour un seul numéro.Sélection Sorte de confusion

def parallel_sort(data, labels) 
    raise "unequal array lengths" if data.length != labels.length 
    temp = File.open("temp.txt", "w") 
    0.upto(data.length - 2) do |i| 
     max = i # largest value 
     (i+1).upto(data.length - 1) { |j| max = j if data[j] > data[max] } 
     data[i], data[max], labels[i], labels[max] = data[max], data[i], labels[max], labels[i] if i != max 

     temp.puts "->", data, "\n", labels, "\n" 
    end 

    return [data, labels] 
end 

données non triées:

-> 26.71% 0.17% 0.65% 0.36% 0.17% 2.79% 0.04% 18.03% 0.13% 25.7% 25.18% 0.36%

: Itérations

-> 26.71% 25,7% 0.65% 0.36% 0.17% 2.79% 0.04% 18.03% 0.13% 0,17% 25.18% 0.36%

-> 26.71% 25.7% 25,18% 0.36% 0.17% 2.79% 0.04% 18.03% 0.13% 0.17% 0,65% 0.36%

18,03% se sautée ici:

-> 26.71% 25.7% 25.18% 2,79% 0.17% 0.36% 0.04% 18.03% 0.13% 0.17% 0.65% 0,36%

-> 26.71% 25.7% 25.18% 2.79% 18,03% 0.36% 0.04% 0,17% 0.13% 0.17% 0.65% 0.36%

-> 26.71% 25.7% 25.18% 2.79% 18.03% 0,65% 0.04% 0.17% 0.13% 0.17% 0,36% 0.36%

-> 26.71% 25.7% 25.18% 2.79% 18.03% 0.65% 0,36% 0.17% 0.13% 0.17% 0,04% 0.36%

-> 26.71% 25.7% 25.18% 2.79% 18.03% 0.65% 0.36% 0,36% 0.13% 0.17% 0.04% 0,17%

-> 26.71% 25.7% 25.18% 2.79% 18.03% 0.65% 0.36% 0.36% 0,17% 0,13% 0.04% 0.17%

-> 26.71% 25.7% 25.18% 2.79% 18.03% 0.65% 0.36% 0.36% 0.17% 0,17% 0.04% 0,13% `

-> 26.71% 25.7% 25.18% 2.79% 18.03% 0.65% 0.36% 0.36% 0.17% 0.17% 0,13%` 0,04%

Je ne peux pas comprendre pourquoi 2,79% est compté comme> 18.03%

Toute aide serait formidable, merci!

Répondre

3

On dirait que vous faites un tri alphabétique, alors je parierais que les données que vous triez sont des chaînes quand vous voulez qu'elles soient flottantes.

+0

soupir ... merci. –