Matrix transposition: Difference between revisions
Content added Content deleted
(→{{header|Go}}: added transpose in place) |
|||
Line 888: | Line 888: | ||
[3 6] |
[3 6] |
||
</pre> |
</pre> |
||
===Transpose in place=== |
|||
{{trans|C}} |
|||
<lang go>func (m *matrix) transposeInPlace() { |
|||
h := len(m.ele) / m.stride |
|||
for start := range m.ele { |
|||
next := start |
|||
i := 0 |
|||
for { |
|||
i++ |
|||
next = (next%h)*m.stride + next/h |
|||
if next <= start { |
|||
break |
|||
} |
|||
} |
|||
if next < start || i == 1 { |
|||
continue |
|||
} |
|||
next = start |
|||
tmp := m.ele[next] |
|||
for { |
|||
i = (next%h)*m.stride + next/h |
|||
if i == start { |
|||
m.ele[next] = tmp |
|||
} else { |
|||
m.ele[next] = m.ele[i] |
|||
} |
|||
next = i |
|||
if next <= start { |
|||
break |
|||
} |
|||
} |
|||
} |
|||
m.stride = h |
|||
}</lang> |
|||
=={{header|Groovy}}== |
=={{header|Groovy}}== |