2014-03-24 84 views
0

我需要创建一个对角矩阵(8×8),并用在[-30..45]范围 随机数填充后我需要变换阵列到载体和排序它红宝石从随机数

对角矩阵我尝试了不同的方式。

起初创建矩阵(8×8)

matrix = Matrix.build(8) {0} 
puts matrix.each_slice(matrix.column_size) {|r| p r } 

另外我与随机数的阵列范围

array = (-30..45).to_a.shuffle 
puts array [0..8] 

并提出的对角矩阵

matrixd = Matrix.diagonal(1,2,3,4,5,6,7,8) 
puts matrixd.each_slice(matrix.column_size) {|r| p r} 

如何能我用我的数组填充对角矩阵并将其放入向量中? 我有2种算法进行排序向量

class Array 
    def bubblesort! 
    length.times do |j| 
     for i in 1...(length - j) 
     if self[i] < self[i - 1] 
      self[i], self[i - 1] = self[i - 1], self[i] 
     end 
     end 
    end 
    self 
    end 
end 

class Array 
    def selectionsort! 
    0.upto(length - 2) do |i| 
     (min_idx = i + 1).upto(length - 1) do |j| 
     if self[j] < self[min_idx] 
      min_idx = j 
     end 
     end 
     if self[i] > self[min_idx] 
     self[i], self[min_idx] = self[min_idx], self[i] 
     end 
    end 
    self 
    end 
end 
+0

你能更什么具体说明创建对角矩阵后你想要做什么?输出示例会很有帮助。 –

回答

3

对于对角矩阵:

elems = [*-30..45].sample(8) 
Matrix.diagonal(*elems) 

至于其他,我不知道你要完成

+3

产生'NoMethodError:未定义的方法'sample'为-30..45:Range'。您可以将其更改为'[* -30..45] .sample(8)'而不是修复它,或者将其改为'(-30..45).to_a.sample(8)'。 –

+0

Oups,修好了,谢谢! –

+1

其余的只是'Vector [* elems.sort]'我想。 –