What is the goal in making the zigzag points? Your algorithm appears to be working and is tunable.

One other approach would be to find the max and min and then find the local maxes and mins between those points (such that the new max point is nearer to the original min point than the new min) and just keep doing that until it stops finding points (with some threshold for min distance between points).