Find maximum in array without comparisons between elements
a) am I correct?


No, that's not correct. Suppose this array is an unsorted array, and you want to find a maximum element in this array. 

First, sorting this array in the increasing order. You can use mergesort or quicksort to sort the array. Mergesort will guarantee the time complexity in the worst and average cases is O(nlogn). However, quicksort will take O(nlogn) for the average case, and O(n) for the worst case. Regarding the worst case of quicksort, if partitioning the array into two groups which one group is empty and another one is (n-1), this will take O(n) time complexity. 

Second, after you have a sorted array in increasing order, you can get the maximum element at the last element in the sorted array.      

b) is it possible to do better?


You can use heapsort with max heaps property. In this case, the largest element is at the root for max heaps. Heapsort will take O(nlogn) since building maxheap takes O(n) and max-heapifying takes O(logn). It takes only O(1) to find a maximum element.