With any given algorithm and hardware, there's something that will be the bottleneck: this portion is taxed to its full 100% capacity, while the rest of the hardware is used at <=100% of its capacity. Different portions of the hardware take different amounts of power and heat to run to capacity. Creating an algorithm that taxes the lower-power portions, while leaving the high-power portions largely free, results in a cooler-running algorithm.
For example, let's say you have one algorithm that's heavily processor-bound, and one that's heavily memory-bound. It'd be perfectly reasonable to expect that the processor-bound one runs hotter than the memory-bound one, so if you want your algorithm to run cool, you choose the memory-bound one.
I should also note that some processes are complicated enough that there is no one bottleneck, but it shifts from time to time (e.g. if you read data from your hard drive, compress it, and transfer it over the network, you might have three completely separate bottlenecks at the different times: disk IO, CPU power, and then network IO). You can view this as a composite of algorithms that individually (should) follow the general rule I outlined above.