Понятие "лучше" абстрактное и вне фразы "лучше чем" не существует. По каким признакам оценивать код - по быстродействию, по читабельности, по еще сто-тыщ-разных критериев?
Если хотите оценить быстродействие - переведите код в ассемблер и посмотрите результат. Скорость выполнения ассемблерных команд тоже конечно в попугаях, но там хоть сравнить можно в числах.
Если хотите оценить понятность кода - второй гораздо сложнее воспринимается. В первом, кстати второй if совершенно лишний :) - a[i] может быть либо равно key, либо не равно, третьего варианта нет, поэтому его совершенно спокойно можно заменить на else - это и по быстродействию даст выйгрыш.
Кстати о присваиваниях. Операции типа tmp++ вполне могут делаться в регистрах, одной командой.