1. A programming method for a non-volatile memory comprising: (a) applying a first programming voltage to a plurality of selected memory cells during a write process that changes threshold voltages of the selected memory cells; (b) repeating step (a) until for each of the selected memory cells, the threshold voltage of the selected memory cell reaches a target voltage that represent a data value being written to the selected memory cell or reaches a predetermined voltage, wherein before each of the repetitions of the step (a), the first programming voltage is increased by a first voltage increment; and (c) in response to the threshold voltages of the selected memory cells having reached the predetermined voltage or having reached the respective target voltages, increasing the predetermined voltage and adjusting the first programming voltage for programming to the increased predetermined voltage; and (d) repeating steps (a), (b), and (c) until the threshold voltages of the selected memory cells respectively reach the target threshold voltages.