How can I make my cipher show the avalanche effect? I am a beginner in cryptography. I designed an password based encryption-decryption algorithm, which uses a random salt and a password to encrypt a message. I'm using SHA-512 for hashing, matrix operations for shuffling, bitwise XOR for mixing data and retrieving. The length of the salt and the ciphertext is 256 letters.

To my knowledge, the avalanche effect means that a slight change in any of the following:


cipher
password
salt 


must change the output drastically. 

In my implementation, if I change the salt or the cipher, I don't see any big changes in my output. However when there is a slight change in password, the output changes drastically.

So, my questions:


Is my understanding of the avalanche effect generally correct? If not, what should it be?
What can I do to best produce the avalanche effect in my (or any) cipher? should I reduce the salt length less and generate a smaller ciphertext to create an avalanche effect? If not, then how can I achieve this?
Don't bother with changing the actual cipher algorithm.  Read about Kerckhoffs's principle: you should only change things like the key and the IV, not the actual algorithm.

In order to test your avalanche, flip one bit in your key.  That should change about half the bits in your output.

For cipher design, Applied Cryptography has already been suggested.  As well as that you need to look at introducing Diffusion and Confusion into your algorithm.  Also it is well worth while studying existing algorithms to see how they go about things.  I started by designing my own simple Feistel cipher, that way a lot of the surrounding structure is already done for you.  It also simplifies the design, in that the F function does not have to be invertible.  That allows you a lot more flexibility in that area.

The warning about not using your own design for anything other than a learning exercise is a good one.