Zoptymalizowana funkcja dwa razy przegląda całą tablicę, a przesłanie tych wszystkich danych z pamięci do procesora zabiera czas. Już na podstawie tego można by się spodziewać, że będzie dwa razy wolniejsza.
Twoja książka pewnie nie bierze pod uwagę takich zjawisk jak hierarchia pamięci czy potokowość i tego jak potokowości szkodzą nieprzewidywalne skoki warunkowe. W ogóle żeby rozumieć kwestie wydajności, to trzeba dobrze znać sprzęt i wiedzieć jaki kod kompilator wygenerował, sama teoria złożoności obliczeniowej nie wystarczy.
Do samego sposobu przeprowadzenia pomiaru też można się przyczepić. Mierzysz nie tylko czas algorytmu, ale też czas operacji wejścia-wyjścia (wyświetlania wyniku). Druga funkcja działa na innych danych niż pierwsza, bo pierwsza te dane zmieniła. Funkcja clock to chyba nie jest najlepszy sposób pomiaru czasu. I najważniejsze, czy włączyłeś optymalizację (flaga -O2 albo -O3)?