1. A wear leveling method for a non-volatile memory, wherein the non-volatile memory is substantially divided into a plurality of blocks, and the blocks are grouped into at least a data area, a spare area, a substitute area, and a temporary area, the wear leveling method comprising: (a) determining the blocks to be selected from the spare area is used for the substitute area or the temporary area; (b) selecting the blocks from the spare area according to a result determined by the step (a), wherein the blocks in the substitute area used for substituting blocks in the data area and the blocks in the temporary area used for storing data of small quantity; and (c) executing a wear leveling procedure, wherein step (b) comprises: determining a hot area in the spare area in order to identify at least one block having relatively higher erase count in the spare area; and when a first block is selected from the spare area to be used in the substitute area, moving the first block to the substitute area if the erase count of the first block is lower than or equal to the sum of the erase count of the block in the hot area and a first threshold, and moving one of the at least one block in the hot area to the substitute area and identifying the first block as a block in the hot area if the erase count of the first block is greater than the sum of the erase count of the block in the hot area and the first threshold.