By definition, the result is bogus if the input array is not sorted. But you can look at it and understand where the bogus result comes from, if you like.
Binary search works by looking at the center element of the array and deciding whether the search target would be before or after that element. The array is then divided in half. Since the array is assumed to be sorted, one half should contain all the elements that come after that center element, and the other half all the ones that come before it. The half that the target might be in is examined further; the other half is ignored. Therefore, the algorithm sees "b", decides that "c" must come after that, and completely ignores the first half of the array where the first "c" appears.
if you follow the logic Ernest laid out, you can see that in the first case, it will conclude that 'c' is not in the array.
and in the second case, it returns the correct answer, so I don't understand your question. Where is the confusion?
and finally, when you say "How the sorting is done here?" - a binarySearch is searching, not sorting. The binarySearch assumes the sorting has ALREADY BEEN DONE. So the actual answer to your question is "It isn't."
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors