наверное потому что return
rowB.cells[colNum].innerHTML>rowB.cells[colNum].innerHTML;
а должно быть return
rowA.cells[colNum].innerHTML>rowB.cells[colNum].innerHTML;
и потом это сравнение возвращает true/false, а должно для сортировки возвращать -1 / 0 / 1, то есть
if (rowA.cells[colNum].innerHTML>rowB.cells[colNum].innerHTML) return 1;
else if (rowA.cells[colNum].innerHTML<rowB.cells[colNum].innerHTML) return -1;
else return 0;
и ещё все строки участвуют в сортировки, а первая строка (заголовок) не должна