Fair cake-cutting is the division of a cake or resource among N users so that each user is content. Users may value a given piece of cake differently, and information about how a user values different parts of the cake can only be obtained by requesting users to "cut" pieces of the cake into specified ratios. One of the most interesting open questions is to determine the minimum number of cuts required to divide the cake fairly. It is known that O(N log N) cuts suffices, however, it is not known whether one can do better. We show that sorting can be reduced to cake-cutting: any algorithm that performs fair cake-division can sort. For a general class of cake-cutting algorithms, which we call linearly-labeled, we obtain an Ω(N log N) lower bound on their computational complexity. All the known cake-cutting algorithms fit into this general class, which leads us to conjecture that every cake-cutting algorithm is linearly-labeled. If in addition, the number of comparisons per cut is bounded (comparison-bounded algorithms), then we obtain an Ω(N log N) lower bound on the number of cuts. All known algorithms are comparison-bounded. We also study variations of envy-free cake-division, where each user feels that they have more cake than every other user. We construct utility functions for which any algorithm (including continuous algorithms) requires Ω(N2) cuts to produce such divisions. These are the the first known general lower bounds for envy-free algorithms. Finally, we study another general class of algorithms called phased algorithms, for which we show that even if one is to simply guarantee each user a piece of cake with positive value, then Ω(N log N) cuts are needed in the worst case. Many of the existing cake-cutting algorithms are phased.