This image scanning method is based on the Hilbert curve. The curve looks (from 1 to 6): 
It can be used to scan images. So for example, my code for a 3rd order curve:
Hilbert=[C(1,1) C(1,2) C(2,2) C(2,1) C(3,1) C(4,1) C(4,2) C(3,2) C(3,3) C(4,3) C(4,4) C(3,4)... C(2,4) C(2,3) C(1,3) C(1,4) C(1,5) C(2,5) C(2,6) C(1,6) C(1,7) C(1,8) C(2,8) C(2,7)... C(3,7) C(3,8) C(4,8) C(4,7) C(4,6) C(3,6) C(3,5) C(4,5) C(5,5) C(6,5) C(6,6) C(5,6)... C(5,7) C(5,8) C(6,8) C(6,7) C(7,7) C(7,8) C(8,8) C(8,7) C(8,6) C(7,6) C(7,5) C(8,5)... C(8,4) C(8,3) C(7,3) C(7,4) C(6,4) C(5,4) C(5,3) C(6,3) C(6,2) C(5,2) C(5,1) C(6,1)... C(7,1) C(7,2) C(8,2) C(8,1)];
And it works and works fast. I performed the same functions for curves of the 8th and 9th order, but it works very, very slowly. Probably the 9th order will never end. At least I did not have the patience to wait for the end - after 2 hours I just turned off the program. But a 7th order curve lasts 15 seconds. What's the matter? Can I do the same, but faster? Yes, the program should read 512 * 512 elements of the array, but this cannot be impossible.
So, what I need - I have the coordinates of the elements of the array, and they are located in the order in which to read. I need for an acceptable amount of time to read them and write in a new array. How to do it?
ps English is still difficult for me, if something is unclear - ask me, please.